GTID是一個基于原始mysql服務器生成的一個已經被成功執行的全局事務ID,它由服務器ID以及事務ID組合而成。這個全局事務ID不僅僅在原始服務器器上唯一,在所有存在主從關系 的mysql服務器上也是唯一的。正是因為這樣一個特性使得mysql的主從復制變得更加簡單,以及數據庫一致性更可靠。本文主要描述了快速配置一個基于GTID的主從復制架構,供大家參考。
1、全局事務標識:global transaction identifiers。
2、GTID是一個事務一一對應,并且全局唯一ID。
3、一個GTID在一個服務器上只執行一次,避免重復執行導致數據混亂或者主從不一致。
4、GTID用來代替傳統復制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS開啟復制。而是使用MASTER_AUTO_POSTION=1的方式開始復制。
5、MySQL-5.6.5開始支持的,MySQL-5.6.10后開始完善。
6、在傳統的slave端,binlog是不用開啟的,但是在GTID中slave端的binlog是必須開啟的,目的是記錄執行過的GTID(強制)。
GTID = source_id:transaction_id
source_id,用于鑒別原服務器,即mysql服務器唯一的的server_uuid,由于GTID會傳遞到slave,所以也可以理解為源ID。
transaction_id,為當前服務器上已提交事務的一個序列號,通常從1開始自增長的序列,一個數值對應一個事務。
示例: 3E11FA47-71CA-11E1-9E33-C80AA9429562:23
前面的一串為服務器的server_uuid,即3E11FA47-71CA-11E1-9E33-C80AA9429562,后面的23為transaction_id
1、更簡單的實現failover,不用以前那樣在需要找log_file和log_pos。
2、更簡單的搭建主從復制。
3、比傳統的復制更加安全。
4、GTID是連續的沒有空洞的,保證數據的一致性,零丟失。
1、當一個事務在主庫端執行并提交時,產生GTID,一同記錄到binlog日志中。
2、binlog傳輸到slave,并存儲到slave的relaylog后,讀取這個GTID的這個值設置gtid_next變量,即告訴Slave,下一個要執行的GTID值。
3、sql線程從relay log中獲取GTID,然后對比slave端的binlog是否有該GTID。
4、如果有記錄,說明該GTID的事務已經執行,slave會忽略。
5、如果沒有記錄,slave就會執行該GTID事務,并記錄該GTID到自身的binlog, 在讀取執行事務前會先檢查其他session持有該GTID,確保不被重復執行。
6、在解析過程中會判斷是否有主鍵,如果沒有就用二級索引,如果沒有就用全部掃描。
對于GTID的配置,主要修改/etc/my.cnf配置文件中與GTID特性相關的幾個重要參數(建議使用mysql-5.6.5以上版本),如下:
1、主:
[mysqld]
server_id=1
gtid_mode=on #開啟gtid模式
enforce_gtid_consistency=on #強制gtid一致性,開啟后對于特定create table不被支持
log_bin=master-binlog
log-slave-updates=1
binlog_format=row #強烈建議,其他格式可能造成數據不一致
skip_slave_start=1
2、從:
[mysqld]
server_id=1
gtid_mode=on
enforce_gtid_consistency=on
log_bin=master-binlog
log-slave-updates=1
binlog_format=row
skip_slave_start=1
1、新配置的mysql服務器
在主服務器上執行以下操作:
> grant replication slave on *.* to 'rep'@'192.168.1.%' identified by '123';
對于新配置的mysql服務器,按本文第五點描述配置參數文件后,在slave端執行以下操作
> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.135',
-> MASTER_USER='rep',
-> MASTER_PASSWORD='123',
-> MASTER_PORT=3306,
-> MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
> start slave;
Query OK, 0 rows affected (0.01 sec)
> show slave status \G; #查看是否正常同步
2、已運行經典復制mysql服務器轉向GTID復制
(1)按本文第五點描述配置參數文件;
(2)所有服務器設置global.read_only參數,等待主從服務器同步完畢;
> SET @@global.read_only = ON;
(3)依次重啟主從服務器;
(4)使用change master 更新主從配置;
> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.135',
-> MASTER_USER='rep',
-> MASTER_PASSWORD='123',
-> MASTER_PORT=3306,
-> MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
> start slave;
Query OK, 0 rows affected (0.01 sec)
> show slave status \G;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。