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';