1. 程式人生 > >gtid環境下mysqldump對於set-gtid-purged的取值

gtid環境下mysqldump對於set-gtid-purged的取值

gtid環境備份的時候,還在為set-gtid-purged=0|1的選擇而煩惱嗎,一起來分析一下。

[[email protected]@/home/mysql]$ mysqldump --help | grep 'set-gtid-purged' -A 10
  --set-gtid-purged[=name] 
                      Add 'SET @@GLOBAL.GTID_PURGED' to the output. Possible
                      values for this option are ON, OFF and AUTO. If ON is
used and GTIDs are not enabled on the server, an error is generated. If OFF is used, this option does nothing. If AUTO is used and GTIDs are enabled on the server, 'SET @@GLOBAL.GTID_PURGED' is added to the output. If GTIDs
are disabled, AUTO does nothing. If no value is supplied then the default (AUTO) value will be considered.

從命令提供的註釋中可以看出,其實該引數有3種取值:

控制是否在備份檔案中新增SET @@GLOBAL.GTID_PURGED語句。

1. set-gtid-purged=0|off 不新增。
2. set-gtid-purged=1|on 如果gtid沒有開啟,則報錯;如果開啟gtid,則新增。
3. 如果沒有提供set-gtid-purged,預設是auto,如果gtid沒有開啟,不新增;如果開啟gtid,則新增。

mysqldump -h5.5.5.101 -uroot -proot --single-transaction --set-gtid-purged=off lxddb t1 > lxddb_t1.sql
[[email protected][email protected]/home/mysql]$ egrep -v '^$|^--|^/' lxddb_t1.sql 
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
  `i1` int(11) NOT NULL DEFAULT '0',
  `i2` int(11) NOT NULL DEFAULT '0',
  `d` date DEFAULT NULL,
  PRIMARY KEY (`i1`,`i2`),
  KEY `k_d` (`d`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (3,1,'1998-01-01'),(3,2,'1999-01-01'),(3,3,'2000-01-01'),(3,4,'2001-01-01'),(3,5,'2002-01-01');
UNLOCK TABLES;
[[email protected][email protected]/home/mysql]$ 

 

mysqldump -h5.5.5.101 -uroot -proot --single-transaction --set-gtid-purged=on lxddb t1 > lxddb_t1.sql
[[email protected][email protected]/home/mysql]$ egrep -v '^$|^--|^/' lxddb_t1.sql 
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED='84e06268-dfa5-11e7-b0bc-080027a59108:1-2';
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
  `i1` int(11) NOT NULL DEFAULT '0',
  `i2` int(11) NOT NULL DEFAULT '0',
  `d` date DEFAULT NULL,
  PRIMARY KEY (`i1`,`i2`),
  KEY `k_d` (`d`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (3,1,'1998-01-01'),(3,2,'1999-01-01'),(3,3,'2000-01-01'),(3,4,'2001-01-01'),(3,5,'2002-01-01');
UNLOCK TABLES;
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
[[email protected][email protected]/home/mysql]$ 

 

結論:

我們備份,就是可能需要拿來進行恢復,是在master上恢復,還是slave上恢復。

如果是在master上進行恢復,那麼就需要生成對應的gtid,所以需要使用set-gtid-purged=off

如果是在slave上進行恢復,那麼不需要生成對應的gtid,所以需要使用set-gtid-purged=on