Docker Mysql 数据迁移

查看启动命令目录映射

  1. 查看容器名称
bash 复制代码
docker ps
  1. 查看容器的启动命令
bash 复制代码
docker inspect mysql8.0 |grep 'CreateCommand' -A 20

如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2

  • 如果没有映射可以通过docker cp 的方式复制到宿主机后,也可以用方法二

方法 1:使用 mysqldump(推荐)

方法1就是将所有库打包成sql,然后再通过sql导入

库适用于数据量 不太大,保证数据完整性。

步骤 1:在源服务器上导出 MySQL 数据

运行以下命令,将 MySQL 所有数据库 导出为 backup.sql

bash 复制代码
docker exec -it mysql8.0 mysqldump -uroot -p --all-databases > backup.sql

如果你只想导出某个数据库:

bash 复制代码
docker exec -it mysql8.0 mysqldump -uroot -p mydatabase > backup.sql

步骤 2:传输 backup.sql 到目标服务器

你可以使用 scprsync

bash 复制代码
scp backup.sql root@目标服务器IP:/root/

或者:

bash 复制代码
rsync -avz backup.sql root@目标服务器IP:/root/

步骤 3:在目标服务器上恢复数据

  1. 拉取 MySQL 8.0.18 并启动新容器
bash 复制代码
docker run --name mysql8.0 -e MYSQL_ROOT_PASSWORD=你的密码 -d -p 3306:3306 mysql:8.0.18
  1. 导入 backup.sql
bash 复制代码
docker cp backup.sql mysql8.0:/backup.sql
docker exec -it mysql8.0 mysql -uroot -p < /backup.sql

方法 2:使用 rsync 直接迁移 MySQL 数据目录

适用于数据量 较大 的情况。

步骤 1:停止 MySQL 容器

bash 复制代码
docker stop mysql8.0

步骤 2:复制 MySQL 数据文件

找到 MySQL 数据目录

bash 复制代码
docker inspect mysql8.0 |grep 'CreateCommand' -A 20

可以知道我的数据是映射再宿主机的/mnt/mysql的,读者的映射地址可能和我不一样

一般默认在 /var/lib/mysql,最好用docker inspect 查看一下

然后用 rsync 传输:

以下步骤的/mnt/mysql 都改成上图读者查询到的宿主机映射目录

bash 复制代码
rsync -avz /mnt/mysql root@目标服务器ip:/mnt/mysql

直到传输完成

步骤 3:在目标服务器上启动 MySQL

  1. 确保 MySQL 目录权限正确
bash 复制代码
chown -R 777 /mnt/mysql
  1. 启动容器

指定映射目录为我们迁移过来的目录这样数据就有了

bash 复制代码
docker run -p 3306:3306 --name mysql8.0 --restart=always -v /mnt/mysql/log:/var/log/mysql -v /mnt/mysql/data:/var/lib/mysql -v /mnt/mysql/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=你的密码 -d mysql:8.0.18

进如容器查看,发现数据库全部迁移过来了

推荐方案

数据完整性要求高方法 1( mysqldump

数据量巨大(几百 GB)方法 2( rsync迁移数据目录)

相关推荐
Amnesia0_011 小时前
MySQL视图和用户管理
数据库·mysql
matrixmind111 小时前
aiomysql:异步场景下的 MySQL 驱动
android·数据库·mysql·其他
“码”力全开12 小时前
云边端协同架构:基于 Docker 与边缘计算的 GB28181/RTSP 异构视频 AI 管理平台设计(附源码交付)
人工智能·docker·架构
IVEN_12 小时前
本地正常,Docker 怎么就空白:Next.js SSR 的 Alpine musl DNS 陷阱
前端·docker·next.js
别叫我老干部12 小时前
一键给整个库造测试数据:外键、约束一个都不能少
后端·mysql
是一个Bug13 小时前
AI Agent 的沙箱是什么?它和 Docker / 虚拟机有什么区别?
人工智能·docker·容器
成为你的宁宁13 小时前
【K8S使用Helm部署MySQL一主多从并集成Prometheus监控】
mysql·kubernetes·prometheus
钝挫力PROGRAMER13 小时前
Kylin V10 安装 MySQL 8.0 后无法通过 127.0.0.1 连接
mysql·kylin
从入门到放弃-咖啡豆13 小时前
记录一次docker部署过程和一些常用的docker指令
运维·docker·容器
“码”力全开13 小时前
解耦异构算力:基于 Docker 与边缘计算的 GB28181/RTSP 企业级 AI 视频管理平台架构设计(含源码交付)
人工智能·docker·边缘计算