首页主机资讯Ubuntu MySQL迁移如何进行

Ubuntu MySQL迁移如何进行

时间2025-12-08 20:46:03发布访客分类主机资讯浏览413
导读: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 项,避免客户端连不上。
  • 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 减少锁表影响;超大库可拆分按库/按表并行处理,或采用物理迁移+复制结合的方式缩短停机窗口。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu MySQL迁移如何进行
本文地址: https://pptw.com/jishu/766316.html
Linux环境下PHP安全设置有哪些 如何配置PHP以支持Linux下的SSL

游客 回复需填写必要信息