Ubuntu MySQL迁移如何进行

Ubuntu 上 MySQL 迁移实操指南一 场景与方案选择跨服务器或跨实例迁移:优先使用逻辑备份与恢复(如 mysqldump),安全、可跨版本/平台,适合大多数业务场景。同机更换数据目录或挂载新盘:采用物理迁移(移动 datadir),性能影响小,但需同时处理 AppArmor 与权限配置。超大数据量或停机窗口极短:可考虑物理拷贝 InnoDB 表空间并结合复制/分批导入,以降低停机时间

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 项,避免客户端连不上。
  • 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 路径的读写权限。
  • 权限与启动
    • 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 配置是否放行新 datadirsocket;必要时用 aa-status 查看状态并热重载 AppArmor。
  • 配置文件读取顺序
    • MySQL 会按固定顺序读取配置文件(如 /etc/my.cnf → /etc/mysql/my.cnf → ~/.my.cnf),请确保修改的是实际生效的文件,并注意 [mysqld] 与 [client] 段的 socket 一致性。
  • 大表与停机时间
    • 逻辑导出/导入大库耗时长,建议在低峰期执行,并使用 –single-transaction 减少锁表影响;超大库可拆分按库/按表并行处理,或采用物理迁移+复制结合的方式缩短停机窗口。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1467958.html

(0)
派派
上一篇 2025-12-08
下一篇 2025-12-08

发表回复

登录后才能评论