MYSQL_GTID詳解
一、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相關引數
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- Lombok 註解詳解Lombok
- Java註解詳解Java
- Java 註解詳解Java
- Java註解最全詳解(超級詳細)Java
- HiveQL詳解Hive
- 詳解Inode
- Vuex詳解Vue
- PWA詳解
- 詳解CountDownLatchCountDownLatch
- DiffUtil詳解
- iptables詳解
- TCP詳解TCP
- CDN詳解
- Typescript詳解TypeScript
- Mybatis詳解MyBatis
- Synchronized詳解synchronized
- TLS 詳解TLS
- 詳解bind
- 詳解GOPATHGo
- HTTP 詳解HTTP
- JavaScript this詳解JavaScript
- BT詳解
- nginx 詳解Nginx
- @autowired詳解
- ECharts 詳解Echarts
- DiskBasedCache詳解
- JavaWeb詳解JavaWeb
- IndexedDB詳解Index
- BART詳解
- JDBC詳解JDBC
- Pod詳解
- HugePages詳解
- Service詳解
- Weakmap詳解
- dcokerfile 詳解
- Git詳解Git
- ARM 詳解