1. 程式人生 > >轉 MYSQL_GTID詳解

轉 MYSQL_GTID詳解

position 主鍵 file 缺點 其中 username 更新 原理 date

http://blog.itpub.net/27067062/viewspace-2141906/ 一、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安全的參數

轉 MYSQL_GTID詳解