如何在docker环境迁移mysql_mysql容器迁移方案

8次阅读

mysql容器迁移应采用数据导出/导入+配置重建+服务切换方案;用mysqldump导出全库(推荐–single-transaction),复制backup.sql至目标容器后导入。

如何在docker环境迁移mysql_mysql容器迁移方案

MySQL 容器迁移的核心是数据安全、服务连续性和配置一致性。直接拷贝容器或镜像不可靠,应聚焦于数据导出/导入 + 配置重建 + 服务切换。

备份与还原:用 mysqldump 迁移数据

这是最通用、兼容性最好的方式,适用于跨版本、跨主机、甚至跨平台迁移。

  • 在源容器中导出全库(含创建语句和数据):
    docker exec mysql-source mysqldump -u root -p’yourpass’ –all-databases –single-transaction > backup.sql
    (建议加 --single-transaction 减少锁表,适合 InnoDB)
  • 将备份文件复制到目标环境:
    docker cp backup.sql mysql-target:/tmp/
  • 在目标容器中导入:
    docker exec -i mysql-target mysql -u root -p’yourpass’

卷(Volume)迁移:保留原始数据目录

适合同版本、同架构、且希望跳过逻辑导入的场景,速度快、不依赖 SQL 解析。

  • 确认源容器使用命名卷(如 mysql-data)或绑定挂载路径;
    查看命令:docker volume inspect mysql-data 或检查 docker inspect 中的 Mounts
  • 停止源容器:docker stop mysql-source
  • 将卷内容打包(若为命名卷,需临时挂载到 busybox 容器中):
    docker run –rm -v mysql-data:/volume -v $(pwd):/backup alpine tar czf /backup/mysql-data.tar.gz -C /volume .
  • 在目标主机解压到对应路径或新建同名卷,启动新容器时复用该卷。

配置与启动参数同步

容器迁移后功能异常,80% 源于配置不一致。关键项必须核对:

  • 字符集与排序规则:检查 my.cnfcharacter-set-server=utf8mb4collation-server=utf8mb4_0900_ai_ci(MySQL 8.0+)
  • binlog 与 GTID:若需后续主从或恢复点,确保 log-binserver-idgtid_mode=ON 等已启用并唯一
  • 挂载路径与权限:数据目录、配置文件ssl 证书路径需在新容器中正确映射,且 MySQL 用户(uid/gid)有读写权限
  • 推荐把 my.cnf 单独挂载为 config 文件,便于版本管理和快速调整

平滑切换与验证

避免停机时间过长或应用报错,迁移后务必验证再切流。

  • 启动新容器后,先连接测试:docker exec -it mysql-new mysql -u root -p -e “SHOW DATABASES;”
  • 比对关键表行数、校验和(如 CHECKSUM table t1;),确认数据完整性
  • 检查慢查询日志、错误日志是否正常生成;观察连接数、QPS 是否符合预期
  • 更新应用配置指向新容器 IP/端口,或通过 dns/Service Mesh 切换流量
text=ZqhQzanResources