MySQL数据库迁移备份核心是保障数据完整、一致、可恢复,需匹配版本/字符集/引擎;导出用mysqldump加--single-transaction等参数,导入前确认权限并预建库。

MySQL 数据库迁移备份到新环境,核心是确保数据完整、一致且可恢复。关键在于选择合适的方法,匹配源和目标环境的版本、字符集、存储引擎等细节。
导出数据:使用 mysqldump 工具
这是最常用、兼容性最好的逻辑备份方式,适合中小规模数据库(通常建议单库小于 50GB)。
- 基础命令示例:
mysqldump -u root -p --databases db1 db2 > backup.sql - 推荐加参数提升兼容性和安全性:
• --single-transaction(InnoDB 表保证一致性快照)
• --routines(导出存储过程/函数)
• --triggers(导出触发器)
• --set-gtid-purged=OFF(避免 GTID 冲突,适用于非 GTID 环境或需手动处理 GTID 的场景)
• --default-character-set=utf8mb4(显式指定字符集,防止乱码) - 注意:导出前确认源库无长时间运行的 DDL 操作,否则可能阻塞或失败。
导入数据:在新环境中还原
导入前需确保目标 MySQL 实例已启动,用户有对应库的创建和写入权限,并预先创建好目标数据库(或让 dump 文件包含 CREATE DATABASE 语句)。
- 基础命令:
mysql -u root -p - 若 dump 文件较大,建议分步操作:
• 先登录 mysql 客户端:mysql -u root -p
• 执行:source /path/to/backup.sql(更可控,支持中断重试) - 导入后检查:
• 运行 SHOW TABLES; 和 SELECT COUNT(*) FROM table_name; 验证表结构与行数
• 检查错误日志中是否有警告(如字符集不匹配、字段类型截断)
大库或生产环境:考虑物理备份(xtrabackup)
当数据库超过 100GB 或要求极短停机时间时,Percona XtraBackup 是更优选择——它支持热备份、增量备份和快速恢复。
- 备份示例:
xtrabackup --backup --target-dir=/backup/full/ --user=root --password=xxx - 恢复流程分三步:
• prepare:应用日志,使备份一致
• copy-back:将数据文件复制回 datadir
• 修改文件属主:chown -R mysql:mysql /var/lib/mysql,再重启服务 - 注意:xtrabackup 版本需与 MySQL 版本兼容(例如 MySQL 8.0 推荐用 xtrabackup 8.0+),且目标环境必须关闭 MySQL 服务才能 copy-back。
迁移前后必做的校验与适配
迁移不是“导出+导入”就结束,环境差异常引发隐性问题。
- 字符集与排序规则:
• 检查源库默认字符集:SHOW VARIABLES LIKE 'character_set%';
• 目标库 my.cnf 中设置 character-set-server = utf8mb4 和 collation-server = utf8mb4_0900_ai_ci(MySQL 8.0) - SQL 模式(sql_mode):
• 导出前查看:SELECT @@GLOBAL.sql_mode;
• 若源为严格模式(如 STRICT_TRANS_TABLES),目标也应保持一致,否则插入可能静默失败 - 用户与权限:
• mysqldump 不导出用户,需单独用 mysqldump -u root -p mysql user db > users.sql 备份权限表,再导入;或用 mysqlpump --users(MySQL 5.7.8+)










