MySQL5.6基於GTID複製配置

MySQL5.6基於GTID複製配置

一、什麼是GTID?

  GTID(Global Transaction Identifiers)是全局事務標識
當使用GTIDS時,在主上提交的每一個事務都會被識別和跟蹤,並且運用到所有從MySQL,而且配置主從或者主從切換時不再需要指定 master_log_files和master_log_pos;由於GTID-base複製是完全基於事務的,所以能很簡單的決定主從複製的一致性;官方建議Binlog採用Row格式

二、GTID的表示方式

source_id:transaction_id
source_id:表示執行事務的主庫的UUID(server_uuid:Mysql5.6的data目錄下啓動時會生成auto.cnf文件記錄了uuid,重啓後uuid不變,刪除文件後會重新生成新的uuid);
transaction_id:是一個從1開始自增的計數,表示在這個主庫上執行的第n個事務;
由於每臺Mysql的uuid是全球唯一的,transaction_id自身唯一,就保證了GTID全局唯一性

三、基於GTID的複製配置

master:192.168.10.216
slave :192.168.10.217
步驟:
修改主從my.cnf增加GTID支持—>主只讀—>拷貝數據到從數據目錄—>重啓主從—>在從上進行配置
1.修改主從my.cnf增加GTID支持

2.主只讀

拷貝主數據到從目錄

3.重啓主從Mysql

4.在從上配置基於GTID的複製

5.啓動從庫

注:

兩個Yes代表複製正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

基於GTID複製的新特性:
Retrieved_Gtid_Set: 21ad8db5-f038-11e3-a14a-0200c0a80ad8:76793-77026
Executed_Gtid_Set: 21ad8db5-f038-11e3-a14a-0200c0a80ad8:1-77025

Retrieved_Gtid_Set項:記錄了relay日誌從Master獲取了binlog日誌的位置
Executed_Gtid_Set項:記錄本機執行的binlog日誌位置(如果是從機,包括Master的binlog日誌位置和slave本身的binlog日誌位置)

四、基於GTID複製增加新的slave

  備份主MySQL數據,記錄主gtid_executed—>將備份數據恢復到從數據目錄—>設置從gtid_purged的值爲主的gtid_executed值—>啓動複製即可

1.使用mysqldump備份主數據
mysqldump —all-databases —single-transaction —triggers —routines —host=127.0.0.1 —port=3306 —user=root —password=geekwolf > backup.sql
亦可以使用xtrabackup也支持GTID:
請參考:http://www.mysqlperformanceblog.com/2013/05/09/how-to-create-a-new-or-repair-a-broken-gtid-based-slave-with-percona-xtrabackup/

2.傳到從MySQL,恢復數據
由於新版本msqldump會記錄並設置GTID_PURGED的值等於主的GTID_EXECUTED,所以只需要將sql導入到從庫即可

3.啓動主從複製

五、基於GTID複製出錯的解決辦法

問題:

解決思路:

從複製跳過已經丟失的binlog,繼續複製或者重新做主從(可以參考上面的操作)

注意事項:
  使用基於GTID複製時,不需要再關心master_log_file和master_log_pos,替代的是隻需要知道master上的GTID,並且配置在從上即可;
記錄GTID的有兩個全局變量:gtid_executed和gtid_purged

與GTID複製相關的參數:

gtid

GTID_EXECUTED :表示已經在該實例上執行過的事務;執行RESET MASTER可以置空該參數;也可以設置GTID_NEXT執行一個空事務來影響GTID_EXECUTED
GTID_NEXT :是SESSION級別參數,表示下一個事務被執行使用的GTID(show variables like ‘gtid_%’;)
GTID_PURGED :表示被刪除的binlog事務GTID,它是GTID_EXCUTED的子集,MySQL5.6.9,該參數無法被設置
GTID_OWENED :表示正在執行的事務的GTID以及對應的線程ID

如果設置MASTER_AUTO_POSITION = 1表示主從複製連接使用基於GTID的方式複製

如果在GTID複製模式下想要使用基於文件的複製協議需要MASTER_AUTO_POSITION=0(至少指定其中MASTER_LOG_FILE、MASTER_LOG_POSITION一個)

參考文檔:

MYSQL 5.6 GTID-based Replication
MYSQL 5.6 GTID模式下手工刪除日誌導致備庫數據丟失
How to create a new (or repair a broken) GTID based slave with Percona XtraBackup


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章