1. 程式人生 > 實用技巧 >5:使用GTID進行復制

5:使用GTID進行復制

  1. 伺服器 192.168.1.1(master) 192.168.1.2(slave)
  2. 同步伺服器,只有當已經在複製但不使用gtid的伺服器時才需要此步驟,,對於新伺服器,請繼續執行步驟5。將每個伺服器上的read_only系統變數設定為ON,使伺服器成為只讀的,方法是發出以下命令:
    • 分別在master和slave上
    • mysql> SET @@global.read_only = ON;
    • Query OK, 0 rows affected (0.00 sec)
  3. 等待所有正在進行的事務提交或回滾。然後,讓slave趕上master。在繼續之前,確保slave已經處理了所有更新,這一點非常重要
  4. 將master和slave上面的mysql服務都停止
    • [
      [email protected]
      ~]# service mysqld stop
    • Redirecting to /bin/systemctl stop mysqld.service
    • #檢視是否停止掉了
    • [[email protected] ~]# ps -ef | grep mysql
    • root 31143 30584 0 23:09 pts/0 00:00:00 grep --color=auto mysql
    • #確實停掉了
  5. 啟用兩臺伺服器並開啟 GTIDs。要啟用基於GTID的複製,必須在啟用GTID模式的情況下啟動每個伺服器,方法是將gtid_mode變數設定為ON,並啟用enforce_gtid_consistency變數以確保僅記錄對基於GTID的複製安全的語句。此外,在配置slave設定之前,您應該使用-skip-slave-start 選項啟動slaves。為什麼需要指定--skip-slave-start,因為指定了--skip-slave-start的話,那麼mysql啟動的時候複製就不會啟動。由於在MySQL 5.7.5中添加了mysql.gtid_executed表,因此為了使用GTIDs啟用二進位制日誌記錄不是必須的。這意味著您可以使用GTIDs但沒有二進位制日誌記錄的slave伺服器。Masters必須始終啟用二進位制日誌記錄,以便能夠複製。
    • 基於上面的講述,我們需要針對master和slave進行不同的配置,下面我就貼上master和slave的配置圖
    • master配置
      • 5:使用GTID進行復制
      • 引數解釋
        • log-bin 表示開啟二進位制日誌
        • server_id 這是唯一的,用來區分伺服器,在複製拓撲結構中,不能出現相同的server_id
        • gtid_mode 表示開啟GTID
        • enforce_gtid_consistency 確保僅記錄對基於GTID的複製安全的語句
    • slave配置
      • 5:使用GTID進行復制
      • 引數解釋(相同引數的解釋請參考上面)
        • skip-slave-start 指定了--skip-slave-start的話,那麼mysql啟動的時候複製就不會啟動
    • 然後啟動master和slave的mysql,這時候可以將master的只讀模式給禁用了
  6. 配置slave以使用基於GTID的自動定位。告訴slave使用具有基於GTID的事務的master作為複製資料來源,並使用基於GTID的自動定位而不是基於檔案的定位。在slave上發出CHANGE MASTER TO語句,包括語句中的MASTER_AUTO_POSITION選項,告訴slave對應master的事務是由GTID識別的。MASTER_LOG_FILE選項和MASTER_LOG_POS選項都不能與MASTER_AUTO_POSITION設定為1一起使用,嘗試這樣做會導致CHANGE MASTER TO語句失敗並顯示錯誤。
    • 在master上
      • #建立複製賬號
      • mysql> CREATE USER 'wangwu'@'%' IDENTIFIED BY '[email protected]';
      • Query OK, 0 rows affected (0.00 sec)
      • mysql> GRANT REPLICATION SLAVE ON . TO 'wangwu'@'%';
      • Query OK, 0 rows affected (0.01 sec)
      • #建立後一定要遠端登入一下賬號,驗證一下是否能登入
    • 在slave上
      • 發出CHANGE MASTER TO
      • mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.1' ,MASTER_USER = 'wangwu',MASTER_PASSWORD = '[email protected]', MASTER_AUTO_POSITION = 1;
      • Query OK, 0 rows affected, 2 warnings (0.01 sec)
      • 引數講解
        • MASTER_HOST master的ip地址
        • MASTER_USER master的複製使用者名稱
        • MASTER_PASSWORD master的複製使用者的密碼
        • MASTER_AUTO_POSITION 當將MASTER_AUTO_POSITION = 1與CHANGE MASTER TO一起使用時,slave嘗試使用基於gtid的複製協議連線到master。
  7. 進行一個新的備份
    • 由於您已啟用GTID,因此在啟用GTIDs之前建立的現有備份現在無法在這些伺服器上使用。。此時進行一個新的備份,這樣您就不會沒有一個可用的備份。
  8. 在slave上
    • 啟動複製
    • mysql> start slave;
    • Query OK, 0 rows affected (0.00 sec)
    • #檢視是否連線上了master
    • mysql> show slave status\G
    • 5:使用GTID進行復制
    • 看到了兩個YES,那就說明沒問題了
    • 禁用只讀模式
    • 僅當您在步驟2中將伺服器配置為只讀時,才需要執行以下步驟。要允許伺服器再次開始接受更新,請發出以下語句:
    • mysql> SET @@global.read_only = OFF;
    • Query OK, 0 rows affected (0.00 sec)
  9. 在master上面新增一些資料,然後在slave中是否能看到,如果能看到就說明沒問題,如果看不到,就及時檢視slave的錯誤日誌

參考資料:https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-howto.html

PREV:4:GTID簡單介紹 https://blog.51cto.com/itzhoujun/2352688
NEXT: 6:多源複製的實現 https://blog.51cto.com/itzhoujun/2353940

轉載於:https://blog.51cto.com/itzhoujun/2352693