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. To make a complete dump, pass --all-databases --triggers --routines --events.
如果一个数据库开启了GTID,使用mysqldump备份的时候或者说是转储的时候,即使不是MySQL全库(所有库)备份,也会备份整个数据库所有的GTID号。
GTID是为了加强数据库的主备一致性、故障恢复和容错能力,mysqldump备份整个数据库用来做从库的话,那么GTID是必须的(一个MySQL主从复制是开启了GTID的场景下)。
但是如果仅仅是备份单个库或者是导入单个库到其它的数据库(也是开启了GTID),那么GTID号有重复概率(GTID由UUID+顺序事务ID组成),所以如果想在数据导入的时候不想导入另外一个数据库全部的GTID,那么可以使用`--set-gtid-purged=OFF`来禁止。
警告的最后一句还说了,如果想备份整个mysql数据库而不是一个或者数据数据库的话,请使用`--all-databases --triggers --routines --events`等参数,当备份整个数据库的时候,建议备份GTID全局唯一事务号。
总结,如果仅仅是导出一个数据库中的某一个库,该数据不是用于主从复制,那么GTID号可以不进行备份,因为一旦备份的话是备份全部的GTID,所以备份单个库的时候最好是关闭GTID,也就是使用`--set-gtid-purged=OFF`,那么该数据导入其它DB的时候会产生新的GTID号。
如果备份单个库时不使用`--set-gtid-purged=OFF`,那么就会导出整个数据库的GTID号码,如果该数据导入其它的数据库,会连着GTID号码一起导入,虽然基本不可能会有GTID重复的概率,但是被导入的数据库会出现多余的GTID号,所以一般情况下备份单个库建议关闭。如果备份整个库的时候,用于全备恢复,一般情况下都是要打开的,其实不打开也会生成新的GTID,主要用于主从复制的时候新建从库,避免主从的GTID不一致,因为按这种方式与主库建立主从复制的话,从库的GTID号与主库一致,如果导出数据时不导出GTID,那么从库数据难以与主库同步(其实这种方式建立主从的情况也很少,一般情况下从库的所有数据都是通过主从复制从主库获取的)。
消除警告: mysqldump xxxxx --set-gtid-purged=OFF > backup.sql