MySQL 設置基於GTID的復制
GTID(全名 global transaction identifier)是事務的唯一標識符。格式如下:
GTID = source_id:transaction_id
source_id:標識了源服務器,通常是服務器的server_uuid
transaction_id:按照服務器上提交的事務順序進行排序的序列號。
例如:
60f9111a-cdba-11e7-b354-005056a30507:1
在配置文件中添加以下信息來啟用GTID模式
[mysqld]
gtid_mode=ON
啟用GTID模式後,可以通過以下語句查看已執行的GTID集合.
mysql>show master status
GTID在復制中的應用
- 在主庫中:當事務在主庫上執行提交時,這個事務就會被分配一個GTID,GTID在事務寫入到主庫的二進制日誌之前寫入到日誌中。
- 從庫獲取主庫的二進制日誌並將其存儲在從庫的中繼日誌中(relay log)。從庫讀取GTID並將gtid_next的值設置為這個GTID。這告訴從庫,下一個事務必須使用這個GTID記錄。
- 從庫驗證GTID是否已經在它自己的二進制日誌中使用。如果沒有使用,從庫會寫入GTID,應用事務,並將事務記錄到從庫的二進制日誌中。
- 由於gtid_next是非空的,所以從庫不會為事務生成新的GTID,而是使用從主庫那裏獲取到的GTID
設置基於GTID的復制
和普通的復制差別不大,只是需要主庫和從庫都開啟gitd_mode和enforce-gitd-consistency。如果從庫是5.6版本的,還需要在在主庫和從庫上額外開啟--log-bin和--log-slave-updates。(無論什麽版本,主庫都必須開啟log-bin)
這是由於在MySQL5.7.5之後,GTIDs在mysql系統庫的gtid_executed表中進行存儲。
-
修改配置文件並重啟數據庫
在my.cnf中添加以下內容[mysqld]
gtid_mode=ON
enforce-gtid-consistency
log-bin
log-slave-updates=1 -
在主庫上創建復制使用的賬號
create user ‘repl‘@‘hostname‘;
grant REPLICATION SLAVE ON *.* TO ‘repl‘@‘hostname‘; - 同步主庫和從庫的數據(如果需要)
使用mysqldump或者其他工具同步數據 -
在從庫上設置基於GTIDs的復制,使用如下語句
mysql> CHANGE MASTER TO
MASTER_HOST = host,
MASTER_PORT = port,
MASTER_USER = user,
MASTER_PASSWORD = password,
MASTER_AUTO_POSITION = 1; - 檢查復制狀態
mysql> show salve status\G
MySQL 設置基於GTID的復制