在开启了GTID模式的数据库,使用mysqldump进行部分数据备份的时候,经常会遇到如下警告
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF.
该警告的意思为:
在开启了GTID模式的数据库,如果你对数据库的部分数据进行了备份,如果不加参数--set-gtid-purged=OFF,该备份中也会包含该数据库的所有GTID。
不添加--set-gtid-purged=OFF命令行参数 ,备份文件的头部会包含以下内容:
系统变量( gtid_purged) 的全局值 @@GLOBAL.gtid_purged是一个 GTID 集合,包含已提交但不存在于binlog中的所有 GTID 组成。 gtid_purged是 gtid_executed的子集 。GTID 的以下类别位于 gtid_purged:
- 未开启binlog的从库提交过事务的GTID
- 写入二进制日志文件(现已被清除)的事务的 GTID。
- 由语句SET @@GLOBAL.gtid_purged 显式添加到集合中的 GTID .
发出 RESET MASTER 会导致gtid_purged 的值重置为空字符串。
什么时候需要手动设置 gtid_purged变量?
可以手动设置 gtid_purged 的值,以便在服务器上记录某个 GTID 集中的事务已被应用,尽管它们不存在于服务器上的任何二进制日志中。此操作的一个示例是当正在恢复服务器上一个或多个数据库的备份,但您没有包含服务器上事务的相关二进制日志时。
在 MySQL 5.7 中,仅当 gtid_executed 为空字符串时才可以更新 gtid_purged 的值 。因此gtid_purged为空字符串。当复制之前尚未开始,或者复制之前未使用 GTID 时,就会出现这种情况