温馨提示×

Debian MySQL迁移步骤与注意事项

小樊
35
2025-11-23 03:52:53
栏目: 云计算

Debian 上 MySQL 迁移步骤与注意事项

一 迁移方案速览

  • 逻辑迁移:使用 mysqldumpmysqlpump 导出为 SQL 脚本,在目标端导入。优点是通用、跨版本兼容性好;适合中小规模或需要跨版本升级的场景。
  • 物理/热备迁移:使用 Percona XtraBackup 进行热备,适合大数据量、要求最小化停机的场景。
  • 文件系统迁移:直接拷贝 /var/lib/mysql 数据目录(停机 + rsync/LVM 快照),适合同版本、同平台快速搬迁。
  • 选择建议:数据量小选逻辑迁移;数据量大且需在线选 XtraBackup;同版本同平台且可停机选文件系统拷贝。

二 标准步骤

  • 通用准备
    1. 在源端创建备份账号并授予必要权限(如 SELECT、SHOW VIEW、LOCK TABLES、RELOAD、REPLICATION CLIENT)。
    2. 记录关键配置:字符集(如 utf8mb4)、排序规则、存储引擎、时区、SQL 模式、InnoDB 参数等。
    3. 规划切换窗口与回滚方案,通知业务方。
  • 逻辑迁移(mysqldump/mysqlpump)
    1. 源端导出:
      • 单库:mysqldump -u [用户] -p[密码] --single-transaction --routines --triggers --default-character-set=utf8mb4 [库名] > backup.sql
      • 全库:mysqldump -u [用户] -p[密码] --single-transaction --routines --triggers --events --default-character-set=utf8mb4 --all-databases > backup.sql
    2. 传输:scp backup.sql user@target:/path/
    3. 目标端导入:mysql -u [用户] -p[密码] < backup.sql
    4. 校验:登录 MySQL,核对库表数量、数据量、主外键、视图/存储过程、错误日志。
  • XtraBackup 热备(大数据量)
    1. 源端安装:sudo apt-get update && sudo apt-get install percona-xtrabackup-24
    2. 备份:xtrabackup --backup --user=[用户] --password=[密码] --target-dir=/path/to/backup
    3. 传输:scp -r /path/to/backup user@target:/path/to/destination
    4. 目标端准备:xtrabackup --prepare --target-dir=/path/to/destination
    5. 恢复:xtrabackup --copy-back --target-dir=/path/to/destination --datadir=/var/lib/mysql
    6. 权限与启动:chown -R mysql:mysql /var/lib/mysql && sudo systemctl start mysql
  • 文件系统迁移(停机)
    1. 停机:sudo systemctl stop mysql
    2. 拷贝:rsync -aAX /var/lib/mysql/ target:/var/lib/mysql/(同版本同平台)
    3. 权限与启动:chown -R mysql:mysql /var/lib/mysql && sudo systemctl start mysql
    4. 如变更 datadir,需同步更新 /etc/mysql/my.cnf 并重启。

三 关键注意事项

  • 版本与兼容性:尽量保持源/目标 MySQL 主版本一致;跨版本迁移先小范围验证。
  • 字符集与排序规则:统一 utf8mb4/utf8mb4_unicode_ci,避免导入后出现乱码或索引限制问题。
  • 一致性:逻辑导出使用 –single-transaction 获取一致性快照;大数据量避免长事务锁表。
  • 停机与回滚:明确切换窗口、DNS/连接串切换顺序与回滚触发条件。
  • 权限与对象:确保账号权限完整;导出时包含 –routines --triggers --events,避免对象缺失。
  • 网络与传输:大文件建议使用 nohup/screen 或断点续传;校验传输完整性(如 md5sum)。
  • 配置文件:核对 my.cnfdatadir、innodb_log_file_size、server_id、bind-address 等关键项。
  • SELinux/AppArmor:如启用,确认对 /var/lib/mysql 的访问策略正确。
  • 监控与告警:迁移后观察错误日志、复制延迟(如有)、连接数、慢查询。

四 迁移后验证与切换

  • 数据一致性:抽样对比表行数、关键聚合值、主外键约束、触发器/存储过程执行结果。
  • 可用性:应用端连通性测试、功能回归、性能压测(QPS/延迟/错误率)。
  • 复制与时区:如启用复制,检查 Slave_IO_Running/Slave_SQL_Running 与延迟;确认 time_zone 设置一致。
  • 切换与回滚:按“只读→应用切换→观察→关闭旧库”的顺序执行;异常立即回滚并恢复只读。

五 常用命令清单

  • 导出单库:mysqldump -u [用户] -p[密码] --single-transaction --routines --triggers --default-character-set=utf8mb4 [库名] > backup.sql
  • 导出全库:mysqldump -u [用户] -p[密码] --single-transaction --routines --triggers --events --default-character-set=utf8mb4 --all-databases > backup.sql
  • 导入:mysql -u [用户] -p[密码] < backup.sql
  • 传输:scp backup.sql user@target:/path/
  • XtraBackup 备份:xtrabackup --backup --user=[用户] --password=[密码] --target-dir=/path/to/backup
  • XtraBackup 准备:xtrabackup --prepare --target-dir=/path/to/backup
  • XtraBackup 恢复:xtrabackup --copy-back --target-dir=/path/to/backup --datadir=/var/lib/mysql
  • 重启服务:sudo systemctl restart mysql

0