MySQL主從復(fù)制之GTID模式詳細(xì)介紹?
一、GTID概述
MySQL5.6 在原有主從復(fù)制的基礎(chǔ)上增加了一個新的復(fù)制方式,即基于GTID的復(fù)制方式,它由UUID和事務(wù)ID兩個部分組成,具有如下特點(diǎn)。
- GTID事務(wù)是全局唯一性的,并且一個事務(wù)對應(yīng)一個GTID值。
- 一個GTID值在同一個MySQL實(shí)例上只會執(zhí)行一次。
二、GTID相較與傳統(tǒng)復(fù)制的優(yōu)勢
- 主從搭建更加簡便,不用手動特地指定
position
位置。 - 復(fù)制集群內(nèi)有一個統(tǒng)一的標(biāo)識,識別、管理上更方便。
- 故障轉(zhuǎn)移更容易,不用像傳統(tǒng)復(fù)制那樣需要找
log_file
和log_Pos
的位置。 - 通常情況下GTID是連續(xù)沒有空洞的,更能保證數(shù)據(jù)的一致性,零丟失。
- 相對于ROW復(fù)制模式,數(shù)據(jù)安全性更高,切換更簡單。
- 比傳統(tǒng)的復(fù)制更加安全,一個GTID在一個MySQL實(shí)例上只會執(zhí)行一次,避免重復(fù)執(zhí)行導(dǎo)致數(shù)據(jù)混亂或者主從不一致。
三、GTID自身存在哪些限制
- 在一個復(fù)制組中,必須都要開啟GTID。
- MySQL5.6開啟GTID需要重啟。
- 不支持
sql_slave_skip_counte
操作,傳統(tǒng)復(fù)制可以使用這個命令跳過事務(wù)。 - 不允許在一個SQL同時更新一個事務(wù)引擎和非事務(wù)引擎的表,如
InnoDB
和MyISAM
。 - 對于
create temporary table 和drop temporary table
語句不支持。 - 不支持create table … select 語句復(fù)制。
四、GTID工作原理簡單介紹
master
節(jié)點(diǎn)在更新數(shù)據(jù)的時候,會在事務(wù)前產(chǎn)生GTID信息,一同記錄到binlog日志中。- slave節(jié)點(diǎn)的io線程將
binlog寫
入到本地relay log中。 - 然后SQL線程從
relay log
中讀取GTID,設(shè)置gtid_next
的值為該gtid,然后對比slave端的binlog
是否有記錄。 - 如果有記錄的話,說明該GTID的事務(wù)已經(jīng)運(yùn)行,slave會忽略。
- 如果沒有記錄的話,slave就會執(zhí)行該GTID對應(yīng)的事務(wù),并記錄到binlog中。
五、如何開啟GTID復(fù)制
除傳統(tǒng)復(fù)制需要開啟的binlog
相關(guān)參數(shù)之外,GTID同步需額外開啟如下參數(shù)設(shè)置,注意主從節(jié)點(diǎn)需要同步開啟。
gtid_mode=on ? ?# 開啟GTID enforce-gtid-consistency=on ?# 需要同步設(shè)置該參數(shù) log-slave-updates=1 ? ? ?# 5.6 版本需要開啟該參數(shù)
六、查看GTID相關(guān)參數(shù)
[root@GreatSQL][(none)]>show variables like '%gtid%'; +----------------------------------+-------------------------------------------------------------------------------------+ | Variable_name ? ? ? ? ? ? ? ? ? ?| Value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | +----------------------------------+-------------------------------------------------------------------------------------+ | binlog_gtid_simple_recovery ? ? ?| ON ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | enforce_gtid_consistency ? ? ? ? | ON ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | gtid_executed ? ? ? ? ? ? ? ? ? ?| 613743f5-8b1c-11ec-9922-00155dcff911:1-14 | | gtid_executed_compression_period | 0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | gtid_mode ? ? ? ? ? ? ? ? ? ? ? ?| ON ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | gtid_next ? ? ? ? ? ? ? ? ? ? ? ?| AUTOMATIC ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | gtid_owned ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | gtid_purged ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | session_track_gtids ? ? ? ? ? ? ?| OFF ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | +----------------------------------+-------------------------------------------------------------------------------------+ 9 rows in set (0.00 sec)
參數(shù)簡要說明:
七、GTID與傳統(tǒng)模式建立復(fù)制時候語句的不同點(diǎn)
# 傳統(tǒng)復(fù)制 change master to master_host="127.0.0.1",master_port=3310,MASTER_USER='sync',MASTER_PASSWORD='GreatSQL',MASTER_LOG_FILE='log-bin.000005', MASTER_LOG_POS=4111; # GTID復(fù)制 change master to master_host="127.0.0.1",master_port=3310,MASTER_USER='sync',MASTER_PASSWORD='GreatSQL',MASTER_AUTO_POSITION=1
GTID同步在建立復(fù)制的時候,將傳統(tǒng)復(fù)制由人為指定binlog
的pos位點(diǎn)改為了MASTER_AUTO_POSITION=1
自動獲取binlog的pos位點(diǎn)。
八、GTID同步狀態(tài)簡單解析
除了傳統(tǒng)的查看binlog和pos值之外,GTID模式可以更直觀的查看某個事務(wù)執(zhí)行的情況。
[root@GreatSQL][(none)]>show slave status\G; *************************** 1. row *************************** ? ? ? ? ? ? ? ?Slave_IO_State: Waiting for master to send event ? ? ? ? ? ? ? ? ? Master_Host: 192.168.6.215 ? ? ? ? ? ? ? ? ? Master_User: sync ? ? ? ? ? ? ? ? ? Master_Port: 3306 ? ? ? ? ? ? ? ? Connect_Retry: 60 ? ? ? ? ? ? ? Master_Log_File: binlog.000001 ? ? ? ? ? Read_Master_Log_Pos: 2425 ? ? ? ? ? ? ? ?Relay_Log_File: mgr2-relay-bin.000002 ? ? ? ? ? ? ? ? Relay_Log_Pos: 2634 ? ? ? ? Relay_Master_Log_File: binlog.000001 ? ? ? ? ? ? ?Slave_IO_Running: Yes ? ? ? ? ? ? Slave_SQL_Running: Yes ? ? ? ? ? ? ? Replicate_Do_DB: ? ? ? ? ? Replicate_Ignore_DB: ? ? ? ? ? ?Replicate_Do_Table: ? ? ? ?Replicate_Ignore_Table: ? ? ? Replicate_Wild_Do_Table: ? Replicate_Wild_Ignore_Table: ? ? ? ? ? ? ? ? ? ?Last_Errno: 0 ? ? ? ? ? ? ? ? ? ?Last_Error: ? ? ? ? ? ? ? ? ?Skip_Counter: 0 ? ? ? ? ? Exec_Master_Log_Pos: 2425 ? ? ? ? ? ? ? Relay_Log_Space: 2842 ? ? ? ? ? ? ? Until_Condition: None ? ? ? ? ? ? ? ?Until_Log_File: ? ? ? ? ? ? ? ? Until_Log_Pos: 0 ? ? ? ? ? ?Master_SSL_Allowed: No ? ? ? ? ? ?Master_SSL_CA_File: ? ? ? ? ? ?Master_SSL_CA_Path: ? ? ? ? ? ? ? Master_SSL_Cert: ? ? ? ? ? ? Master_SSL_Cipher: ? ? ? ? ? ? ? ?Master_SSL_Key: ? ? ? ? Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No ? ? ? ? ? ? ? ? Last_IO_Errno: 0 ? ? ? ? ? ? ? ? Last_IO_Error: ? ? ? ? ? ? ? ?Last_SQL_Errno: 0 ? ? ? ? ? ? ? ?Last_SQL_Error: ? Replicate_Ignore_Server_Ids: ? ? ? ? ? ? ?Master_Server_Id: 2153306 ? ? ? ? ? ? ? ? ? Master_UUID: 613743f5-8b1c-11ec-9922-00155dcff911 ? ? ? ? ? ? ?Master_Info_File: mysql.slave_master_info ? ? ? ? ? ? ? ? ? ? SQL_Delay: 0 ? ? ? ? ? SQL_Remaining_Delay: NULL ? ? ? Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates ? ? ? ? ? ?Master_Retry_Count: 86400 ? ? ? ? ? ? ? ? ? Master_Bind: ? ? ? Last_IO_Error_Timestamp: ? ? ?Last_SQL_Error_Timestamp: ? ? ? ? ? ? ? ?Master_SSL_Crl: ? ? ? ? ? ?Master_SSL_Crlpath: ? ? ? ? ? ?Retrieved_Gtid_Set: 613743f5-8b1c-11ec-9922-00155dcff911:1-10 ? ? ? ? ? ? Executed_Gtid_Set: 613743f5-8b1c-11ec-9922-00155dcff911:1-10, 652ade08-8b1c-11ec-9f62-00155dcff90a:1-2 ? ? ? ? ? ? ? ? Auto_Position: 1 ? ? ? ? ?Replicate_Rewrite_DB: ? ? ? ? ? ? ? ? ?Channel_Name: ? ? ? ? ? ?Master_TLS_Version: ? ? ? ?Master_public_key_path: ? ? ? ? Get_master_public_key: 0 ? ? ? ? ? ? Network_Namespace: 1 row in set, 1 warning (0.01 sec) ERROR: No query specified
GTID相關(guān)鍵參數(shù)說明:
到此這篇關(guān)于MySQL主從復(fù)制之GTID模式詳細(xì)介紹 的文章就介紹到這了,更多相關(guān)MySQL主從復(fù)制之GTID模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql group by having 實(shí)例代碼
mysql中g(shù)roup by語句用于分組查詢,可以根據(jù)給定數(shù)據(jù)列的每個成員對查詢結(jié)果進(jìn)行分組統(tǒng)計(jì),最終得到一個分組匯總表, 經(jīng)常和having一起使用,需要的朋友可以參考下2016-11-11基于一致性hash算法(consistent hashing)的使用詳解
本篇文章對一致性hash算法(consistent hashing)的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05MySQL 自動備份與數(shù)據(jù)庫被破壞后的恢復(fù)方法
當(dāng)數(shù)據(jù)庫服務(wù)器建立好以后,我們首先要做的不是考慮要在這個支持?jǐn)?shù)據(jù)庫的服務(wù)器運(yùn)行哪些受MySQL提攜的程序,而是當(dāng)數(shù)據(jù)庫遭到破壞后,怎樣安然恢復(fù)到最后一次正常的狀態(tài),使得數(shù)據(jù)的損失達(dá)到最小。2010-03-03