跳转至

GTID备份恢复说明

方案1:不包含 GTID 信息(适用于大多数情况)

mysqldump --set-gtid-purged=OFF -u username -p database_name > dump.sql

适用场景:

  • 目标服务器没有启用 GTID
  • 不需要基于 GTID 的复制
  • 只是简单的数据迁移或备份

方案2:完整导出所有数据库(包含 GTID)

mysqldump --all-databases --triggers --routines --events -u username -p > full_dump.sql

适用场景:

  • 需要完整备份服务器
  • 准备设置基于 GTID 的复制
  • 需要保留所有数据库对象和事务历史

方案3:部分导出但保留 GTID(高级用途)

mysqldump --set-gtid-purged=ON -u username -p database_name > dump_with_gtid.sql

适用场景:

  • 目标服务器也启用了 GTID
  • 需要保持事务一致性
  • 用于搭建复制环境

参数说明

参数 说明
--set-gtid-purged=OFF 不包含 GTID 信息
--set-gtid-purged=ON 包含 GTID 信息
--all-databases 导出所有数据库
--triggers 包含触发器
--routines 包含存储过程和函数
--events 包含事件调度器事件

实际应用建议

开发环境迁移:

使用 --set-gtid-purged=OFF

mysqldump --set-gtid-purged=OFF -u root -p mydb > mydb_backup.sql

生产环境完整备份:

mysqldump --all-databases --triggers --routines --events -u root -p > full_backup.sql

设置复制时的导出:

mysqldump --set-gtid-purged=ON --master-data=2 -u repl_user -p mydb > mydb_for_replication.sql

常见问题解决

问题1:导入时出现 GTID 相关错误

解决:在导入前在目标服务器执行:

RESET MASTER;

问题2:需要跳过特定 GTID 事务

解决:在目标服务器执行:

SET @@GLOBAL.gtid_purged = '3E11FA47-71CA-11E1-9E33-C80AA9429562:1-20';