MySQL之GTID簡介

官網:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html

簡介

MySQL5.6 以後,提供了基於 GTID 多開啓多線程同步複製的方案,即每個庫有一個單獨的(sql thread),進行同步複製,這將大大改善 MySQL 主從同步的數據延遲問題,此外,用 GTID 避免了在傳送 binlog 邏輯上依賴文件名和物理偏移量,能夠更好的支持自動容災切換,傳統的方式裏,你需要找到 binlog和 POS 點,然後 change master to 指向,而不是很有經驗的運維,往往會將其找錯,造成主從同步複製報錯,在 mysql5.6 裏,無須再知道 binlog 和 POS 點,需要知道 master 的 IP、端口,賬號密碼即可,因爲同步複製是自動的,mysql 通過內部機制 GTID 自動找點同步。

概念

GTID(global transaction identifier):mysql服務提交事務時會創建一個全局標識符,它不僅在主(master)服務器上唯一標識,而且在從(slave)服務上也是唯一標識的。

格式

GTID = source_id:transaction_id

source_id:mysql的server_id;
transaction_id:事務提交時,會生成一個序列號,第一個提交的事務值爲1,第十個提交的事務值爲10。

//第23個事務被提交時生成的GTID
3E11FA47-71CA-11E1-9E33-C80AA9429562:23

同一mysql服務上的多個GTID可以縮寫:

3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5

工作原理

  • 主服務執行並提交事務時生成GTID,寫入binary log文件。
  • binary log傳輸到從服務上後,被存儲在relay log中,從服務讀取GTID並將值設置到gtid_next系統變量中,gtid_next代表下個事務要執行的GTID。
  • 從服務會去讀取自己的binary log來判斷是否執行過此GTID,如果有記錄,則會忽略;如果沒有執行過,將GTID寫進binary log,執行事務之前,確保其他的session客戶端沒有執行提交過該GTID事務,保證數據的一致性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章