DockerMysql数据迁移
- 创业
- 2025-08-23 12:42:02

查看启动命令目录映射 查看容器名称 docker ps 查看容器的启动命令 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:
docker exec -it mysql8.0 mysqldump -uroot -p --all-databases > backup.sql如果你只想导出某个数据库:
docker exec -it mysql8.0 mysqldump -uroot -p mydatabase > backup.sql 步骤 2:传输 backup.sql 到目标服务器你可以使用 scp 或 rsync:
scp backup.sql root@目标服务器IP:/root/或者:
rsync -avz backup.sql root@目标服务器IP:/root/ 步骤 3:在目标服务器上恢复数据 拉取 MySQL 8.0.18 并启动新容器 docker run --name mysql8.0 -e MYSQL_ROOT_PASSWORD=你的密码 -d -p 3306:3306 mysql:8.0.18 导入backup.sql docker cp backup.sql mysql8.0:/backup.sql docker exec -it mysql8.0 mysql -uroot -p < /backup.sql方法 2:使用 rsync 直接迁移 MySQL 数据目录
适用于数据量 较大 的情况。
步骤 1:停止 MySQL 容器 docker stop mysql8.0 步骤 2:复制 MySQL 数据文件找到 MySQL 数据目录
docker inspect mysql8.0 |grep 'CreateCommand' -A 20可以知道我的数据是映射再宿主机的/mnt/mysql的,读者的映射地址可能和我不一样
一般默认在 /var/lib/mysql,最好用docker inspect 查看一下
然后用 rsync 传输:
以下步骤的/mnt/mysql 都改成上图读者查询到的宿主机映射目录
rsync -avz /mnt/mysql root@目标服务器ip:/mnt/mysql直到传输完成
步骤 3:在目标服务器上启动 MySQL 确保 MySQL 目录权限正确 chown -R 777 /mnt/mysql 启动容器指定映射目录为我们迁移过来的目录这样数据就有了
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迁移数据目录)
DockerMysql数据迁移由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“DockerMysql数据迁移”