MYSQL_GTID詳解

yepkeepmoving發表於2017-07-11
一、GTID概述
  GTID是MYSQL5.6新增的特性,GTID(Global Transaction Identifier)全稱為全域性事務標示符,用以資料庫例項事務唯一標識,其組成主要是source_id和transaction_id 即GTID = source_id:transaction_id。其中source_id是資料庫啟動自動生成的資料庫例項唯一標識,儲存在auto.cnf中,而transaction_id則是事務執行的序列號。
二、GTID優缺點
  優點:
    複製安全性更高,一個事務在每個例項上只執行一次;
    故障切換簡單,可透過設定MASTER_AUTO_POSITION=1,而非master_log_file和master_log_pos來建立主從關係;
    可根據GTID確定事務最早提交的例項;
  缺點:
    組複製中,必須要求統一開啟GTID或者關閉GTID;
    不支援複製create table table_name select ... from table_name_xx ;
    不支援create temporary table和drop temporary table;
    不支援sql_slave_skip_counter,可透過set global gtid_next='' 跳過;
    從庫和主庫都必須設定log_slave_updates
三、GTID工作原理
  1、master更新資料時,會在事務前產生GTID,一同記錄到binlog日誌中。
  2、slave端的i/o 執行緒將變更的binlog,寫入到本地的relay log中。
  3、sql執行緒從relay log中獲取GTID,然後對比slave端的binlog是否有記錄。
  4、如果有記錄,說明該GTID的事務已經執行,slave會忽略。
  5、如果沒有記錄,slave就會從relay log中執行該GTID的事務,並記錄到binlog。
  6、在解析過程中會判斷是否有主鍵,如果沒有就用二級索引,如果沒有就用全部掃描。
四、GTID開啟和關閉
  gtid_mode=ON(必選)
  log_bin=ON(必選)
  log-slave-updates=ON(必選)
  enforce-gtid-consistency(必選)
  log-bin = /home/mysql/mysql-bin(必選)
  binlog_format = MIXED(必選mixed或者row)
  ## 
  change master to master_host = 'ipaddr',master_port = 3306,master_user = 'username',master_password='password',master_auto_position = 1;
五、GTID適用場景
  1、搭建高可用架構,方便主從切換後,新的從庫重新指定主庫(例如一主二從的結構,A為mater,B為Slave,C為Slave,A當機切換到B後,C重新指定主庫為B)
  2、不經常使用create table table_name select * from table_name/create temporary table/update t1,t2 where ...這種語句的場合
六、GTID相關引數
引數 comment
gtid_executed 執行過的所有GTID,可透過reset master重置
gtid_purged 丟棄掉的GTID,設定後從而導致slave不會再去master請求這些GTIDs,並且Executed_Gtid_Set為空時,才可以設定此值
gtid_mode gtid模式
gtid_next session級別的變數,下一個gtid
gtid_owned 正在執行的gtid
enforce_gtid_consistency 保證GTID安全的引數


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27067062/viewspace-2141906/,如需轉載,請註明出處,否則將追究法律責任。