MySQL主從復(fù)制之GTID模式詳細(xì)介紹?
一、GTID概述
MySQL5.6 在原有主從復(fù)制的基礎(chǔ)上增加了一個(gè)新的復(fù)制方式,即基于GTID的復(fù)制方式,它由UUID和事務(wù)ID兩個(gè)部分組成,具有如下特點(diǎn)。
- GTID事務(wù)是全局唯一性的,并且一個(gè)事務(wù)對(duì)應(yīng)一個(gè)GTID值。
- 一個(gè)GTID值在同一個(gè)MySQL實(shí)例上只會(huì)執(zhí)行一次。
二、GTID相較與傳統(tǒng)復(fù)制的優(yōu)勢(shì)
- 主從搭建更加簡(jiǎn)便,不用手動(dòng)特地指定
position
位置。 - 復(fù)制集群內(nèi)有一個(gè)統(tǒng)一的標(biāo)識(shí),識(shí)別、管理上更方便。
- 故障轉(zhuǎn)移更容易,不用像傳統(tǒng)復(fù)制那樣需要找
log_file
和log_Pos
的位置。 - 通常情況下GTID是連續(xù)沒(méi)有空洞的,更能保證數(shù)據(jù)的一致性,零丟失。
- 相對(duì)于ROW復(fù)制模式,數(shù)據(jù)安全性更高,切換更簡(jiǎn)單。
- 比傳統(tǒng)的復(fù)制更加安全,一個(gè)GTID在一個(gè)MySQL實(shí)例上只會(huì)執(zhí)行一次,避免重復(fù)執(zhí)行導(dǎo)致數(shù)據(jù)混亂或者主從不一致。
三、GTID自身存在哪些限制
- 在一個(gè)復(fù)制組中,必須都要開(kāi)啟GTID。
- MySQL5.6開(kāi)啟GTID需要重啟。
- 不支持
sql_slave_skip_counte
操作,傳統(tǒng)復(fù)制可以使用這個(gè)命令跳過(guò)事務(wù)。 - 不允許在一個(gè)SQL同時(shí)更新一個(gè)事務(wù)引擎和非事務(wù)引擎的表,如
InnoDB
和MyISAM
。 - 對(duì)于
create temporary table 和drop temporary table
語(yǔ)句不支持。 - 不支持create table … select 語(yǔ)句復(fù)制。
四、GTID工作原理簡(jiǎn)單介紹
master
節(jié)點(diǎn)在更新數(shù)據(jù)的時(shí)候,會(huì)在事務(wù)前產(chǎn)生GTID信息,一同記錄到binlog日志中。- slave節(jié)點(diǎn)的io線程將
binlog寫(xiě)
入到本地relay log中。 - 然后SQL線程從
relay log
中讀取GTID,設(shè)置gtid_next
的值為該gtid,然后對(duì)比slave端的binlog
是否有記錄。 - 如果有記錄的話(huà),說(shuō)明該GTID的事務(wù)已經(jīng)運(yùn)行,slave會(huì)忽略。
- 如果沒(méi)有記錄的話(huà),slave就會(huì)執(zhí)行該GTID對(duì)應(yīng)的事務(wù),并記錄到binlog中。
五、如何開(kāi)啟GTID復(fù)制
除傳統(tǒng)復(fù)制需要開(kāi)啟的binlog
相關(guān)參數(shù)之外,GTID同步需額外開(kāi)啟如下參數(shù)設(shè)置,注意主從節(jié)點(diǎn)需要同步開(kāi)啟。
gtid_mode=on ? ?# 開(kāi)啟GTID enforce-gtid-consistency=on ?# 需要同步設(shè)置該參數(shù) log-slave-updates=1 ? ? ?# 5.6 版本需要開(kāi)啟該參數(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ù)簡(jiǎn)要說(shuō)明:
七、GTID與傳統(tǒng)模式建立復(fù)制時(shí)候語(yǔ)句的不同點(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ù)制的時(shí)候,將傳統(tǒng)復(fù)制由人為指定binlog
的pos位點(diǎn)改為了MASTER_AUTO_POSITION=1
自動(dòng)獲取binlog的pos位點(diǎn)。
八、GTID同步狀態(tài)簡(jiǎn)單解析
除了傳統(tǒng)的查看binlog和pos值之外,GTID模式可以更直觀的查看某個(gè)事務(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ù)說(shuō)明:
到此這篇關(guān)于MySQL主從復(fù)制之GTID模式詳細(xì)介紹 的文章就介紹到這了,更多相關(guān)MySQL主從復(fù)制之GTID模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL gtid的具體使用
- MySQL主從復(fù)制基于binlog與GTID詳解
- MySQL基于GTID主從搭建
- MySQL復(fù)制之GTID復(fù)制的具體使用
- MySQL在線開(kāi)啟或禁用GTID模式
- MySQL GTID全面總結(jié)
- MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便)
- Mysql GTID Mha配置方法
- 詳解MySQL主從復(fù)制實(shí)戰(zhàn) - 基于GTID的復(fù)制
- MySQL9.1.0實(shí)現(xiàn)GTID模式的項(xiàng)目實(shí)踐
相關(guān)文章
mysql group by having 實(shí)例代碼
mysql中g(shù)roup by語(yǔ)句用于分組查詢(xún),可以根據(jù)給定數(shù)據(jù)列的每個(gè)成員對(duì)查詢(xún)結(jié)果進(jìn)行分組統(tǒng)計(jì),最終得到一個(gè)分組匯總表, 經(jīng)常和having一起使用,需要的朋友可以參考下2016-11-11基于一致性hash算法(consistent hashing)的使用詳解
本篇文章對(duì)一致性hash算法(consistent hashing)的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05MySQL數(shù)據(jù)庫(kù)鎖機(jī)制原理解析
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)鎖機(jī)制原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12MySQL 自動(dòng)備份與數(shù)據(jù)庫(kù)被破壞后的恢復(fù)方法
當(dāng)數(shù)據(jù)庫(kù)服務(wù)器建立好以后,我們首先要做的不是考慮要在這個(gè)支持?jǐn)?shù)據(jù)庫(kù)的服務(wù)器運(yùn)行哪些受MySQL提攜的程序,而是當(dāng)數(shù)據(jù)庫(kù)遭到破壞后,怎樣安然恢復(fù)到最后一次正常的狀態(tài),使得數(shù)據(jù)的損失達(dá)到最小。2010-03-03windows系統(tǒng)mysql壓縮包版本安裝過(guò)程
這篇文章主要介紹了windows系統(tǒng)mysql壓縮包版本安裝過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03