Ubuntu MySQL迁移如何进行
导读:Ubuntu 上 MySQL 迁移实操指南 一 场景与方案选择 跨服务器或跨实例迁移:优先使用逻辑备份与恢复(如 mysqldump),安全、可跨版本/平台,适合大多数业务场景。 同机更换数据目录或挂载新盘:采用物理迁移(移动 datad...
Ubuntu 上 MySQL 迁移实操指南
一 场景与方案选择
- 跨服务器或跨实例迁移:优先使用逻辑备份与恢复(如 mysqldump),安全、可跨版本/平台,适合大多数业务场景。
- 同机更换数据目录或挂载新盘:采用物理迁移(移动 datadir),性能影响小,但需同时处理 AppArmor 与权限配置。
- 超大数据量或停机窗口极短:可考虑物理拷贝 InnoDB 表空间并结合复制/分批导入,以降低停机时间(需严格一致性与回滚方案)。
二 跨服务器或跨实例迁移步骤
- 准备与评估
- 确认源/目标 MySQL 版本、字符集、存储引擎与参数差异;对生产库先在测试环境演练。
- 规划停机窗口与回滚方案(保留旧库只读或延迟切换)。
- 备份与传输
- 逻辑备份(推荐):
- 单库:
- mysqldump -u [user] -p --single-transaction --routines --triggers --default-character-set=utf8mb4 [db] > backup.sql
- 全库(排除系统库):
- mysqldump -u [user] -p --single-transaction --routines --triggers --databases $(mysql -u [user] -p -Nse “SHOW DATABASES LIKE ‘yourdb_%’”) > backup.sql
- 压缩传输:
- gzip backup.sql & & scp backup.sql.gz user@new_host:/backup/
- 单库:
- 传输到目标后解压:gunzip backup.sql.gz
- 逻辑备份(推荐):
- 目标库准备
- 如目标库已存在同名库,先做好备份或选择不同库名;必要时调整 lower_case_table_names、字符集/排序规则等参数,避免导入后不一致。
- 恢复与校验
- mysql -u [user] -p [db] < backup.sql(全库恢复可直接:mysql -u [user] -p < backup.sql)
- 校验:登录 MySQL 检查库表数量、关键表行数、主外键、视图/存储过程可用性,抽样查询验证数据正确性。
- 切换与回滚
- 短暂停写源库,完成最终一致性校验后切换应用连接串;保留旧库只读一段时间以便快速回滚。
三 同机更换数据目录或迁移到新盘
- 停库与确认路径
- sudo systemctl stop mysql
- 确认当前数据目录:mysql -e “SHOW VARIABLES LIKE ‘datadir’; ”(常见为 /var/lib/mysql)
- 迁移数据
- 推荐先复制后切换:sudo cp -a /var/lib/mysql /mnt/data/mysql
- 或移动:sudo mv /var/lib/mysql /mnt/data/mysql
- 配置调整
- 编辑配置文件(Ubuntu 常见为 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf):
- [mysqld] 下设置:datadir = /mnt/data/mysql
- 如 socket 路径变化,同步更新 [mysqld] 与 [client] 的 socket 项,避免客户端连不上。
- 编辑配置文件(Ubuntu 常见为 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf):
- AppArmor 放行新路径
- 编辑 /etc/apparmor.d/usr.sbin.mysqld,将
- /var/lib/mysql/ r,
- /var/lib/mysql/** rwk,
替换为 - /mnt/data/mysql/ r,
- /mnt/data/mysql/** rwk,
- 如 [client] 使用了自定义 socket,还需在 /etc/apparmor.d/abstractions/mysql 中同步更新 socket 路径的读写权限。
- 编辑 /etc/apparmor.d/usr.sbin.mysqld,将
- 权限与启动
- sudo chown -R mysql:mysql /mnt/data/mysql
- sudo systemctl restart apparmor
- sudo systemctl start mysql
- 验证
- 登录检查:mysql -e “SHOW VARIABLES LIKE ‘datadir’; ” 应返回新路径;查看错误日志:tail -n 100 /var/log/mysql/error.log。
四 常见问题与排查要点
- 权限与所有权
- 数据目录及子文件必须属于 mysql:mysql,权限通常为 700;否则 InnoDB 可能无法创建/写入文件(如 ibdata1)。
- AppArmor 误报
- 启动失败若提示权限问题,优先检查 /var/log/mysql/error.log 与 AppArmor 配置是否放行新 datadir 与 socket;必要时用 aa-status 查看状态并热重载 AppArmor。
- 配置文件读取顺序
- MySQL 会按固定顺序读取配置文件(如 /etc/my.cnf → /etc/mysql/my.cnf → ~/.my.cnf),请确保修改的是实际生效的文件,并注意 [mysqld] 与 [client] 段的 socket 一致性。
- 大表与停机时间
- 逻辑导出/导入大库耗时长,建议在低峰期执行,并使用 --single-transaction 减少锁表影响;超大库可拆分按库/按表并行处理,或采用物理迁移+复制结合的方式缩短停机窗口。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MySQL迁移如何进行
本文地址: https://pptw.com/jishu/766316.html
