1. 程式人生 > >MySQL 設置基於GTID的復制

MySQL 設置基於GTID的復制

gtid 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表中進行存儲。

  1. 修改配置文件並重啟數據庫
    在my.cnf中添加以下內容

    [mysqld]
    gtid_mode=ON
    enforce-gtid-consistency
    log-bin
    log-slave-updates=1

  2. 在主庫上創建復制使用的賬號

    create user ‘repl‘@‘hostname‘;
    grant REPLICATION SLAVE ON *.* TO ‘repl‘@‘hostname‘;

  3. 同步主庫和從庫的數據(如果需要)
    使用mysqldump或者其他工具同步數據
  4. 在從庫上設置基於GTIDs的復制,使用如下語句

    mysql> CHANGE MASTER TO
    MASTER_HOST = host,
    MASTER_PORT = port,
    MASTER_USER = user,
    MASTER_PASSWORD = password,
    MASTER_AUTO_POSITION = 1;

  5. 檢查復制狀態

    mysql> show salve status\G

MySQL 設置基於GTID的復制