Mysql基于GTIDs的复制
?
通過(guò)GTIDs【global transaction identifiers】,可以標(biāo)識(shí)每一個(gè)事務(wù),并且可以在其一旦提交追蹤并應(yīng)用于任何一個(gè)Slave上;這樣 就不需要像BinaryLog復(fù)制依賴Log file 和位置。GTIDs完全基于事務(wù),只要在Master提交的所有事務(wù)都在Slave上進(jìn)行了Commit,那么就能保證Master和Slave之間的數(shù)據(jù) 一致性。你可以使用基于SBR或RBR的GTIDs來(lái)實(shí)現(xiàn)。推薦使用RBR【Row-based replication】.
1 GTID介紹?
GTID的惟一性,不僅僅在Master上惟一,而是在整個(gè)集群中惟一。
GTID是由SourceId:transaction_Id 構(gòu)成;SourceId用于標(biāo)識(shí)源Server,即Master中的server_uuid[系統(tǒng)變量];transaction_id,是按照事務(wù)提交順序而生成的序列數(shù)字。如第一個(gè)被提交的是1,則其GTID=XXXXXXXXXXXX:1.
GTID被存儲(chǔ)于mysql.gtid_executed中,當(dāng)gtid_mode=ON/ON_PERMISSIVE時(shí)。
GTID的生命周期
a.事務(wù)在Master上執(zhí)行并提交
該事務(wù)用GTID標(biāo)識(shí),GTID由Master的UUID和一個(gè)非0的未被使用的事務(wù)序列號(hào)構(gòu)成;該GTID被寫入Master的BinLog中。
b.之后BinLog被傳送到Slave上并存儲(chǔ)在Slave的relay Log中【using established mechanisms for this process】.Slave讀取到這個(gè)GTID,并為系統(tǒng)變量gtid_next賦值,這就告訴了Slave下一個(gè)要執(zhí)行的事務(wù)【transaction】就是這個(gè)。
c.Slave確認(rèn)該GTID是否已被使用【在其BinLog中】。若未用,則執(zhí)行transaction并寫入BinLog。需要注意的是:不僅僅是檢查BinLog而且要確認(rèn)沒(méi)有其他session 已讀取但未提交。換句話說(shuō),多個(gè)Clients不允許并行執(zhí)行同一事務(wù)。
d.由于gtid_next不為空。Slave執(zhí)行并寫入BinLog。
2.構(gòu)建GTID復(fù)制
a. 同步數(shù)據(jù)。即將Master與Slave的數(shù)據(jù)同步到一致,然后都開(kāi)啟SET @@global.read_only=ON;
b.停止Servers。可使用:mysqladmin -uroot -p shutdown
c.配置主從Server.確保雙方都開(kāi)啟gtid_mode=ON,enforce_gtid_consistency=ON。
d.將Slave掛載到Master,告訴Slave將使用哪個(gè)Master作為復(fù)制的數(shù)據(jù)源。使用CHANGE MASTER TO語(yǔ)句,一定要啟用MASTER_AUTO_POSITION=1,告訴Slave事務(wù)將由GTIDS標(biāo)識(shí)。
e.啟動(dòng)Slave. START SLAVE.
f.關(guān)閉 read_only.?SET @@global.read_only = OFF.
3.使用GTIDs限制
GTIDs是基于事務(wù)的【transactions】,所以對(duì)非事務(wù)的操作不會(huì)支持。
? CREATE TABLE ... SELECT statements .creat table ...select對(duì)基于語(yǔ)句的復(fù)制【SBR】是不安全的。
Temporary tables 。GTIDsg不支持CREATE ?TEMPORARY TABLE AND DROP TEMPORARY TABLE .
【Preventing execution of unsupported statements】阻止不支持語(yǔ)句的執(zhí)行。為了防止GTID受到不支持語(yǔ)句的影響而失敗,在參與復(fù)制的Server上都要使用enforce-gtid-consistency操作。
sql_slave_skip_counter用于跳過(guò)不支持的事務(wù)【這在GTIDs不支持】。
在gtid_mode=ON時(shí)不要進(jìn)行mysql_upgrade,因?yàn)镸ysql_update會(huì)用MyiSam引擎改變一些系統(tǒng)表。
也不要在gtid_mode=ON時(shí)進(jìn)行mysqldump文件的導(dǎo)入。
也可參考這篇文章:
http://www.cnblogs.com/abobo/p/4242417.html?
?
轉(zhuǎn)載于:https://www.cnblogs.com/itdev/p/6002713.html
總結(jié)
以上是生活随笔為你收集整理的Mysql基于GTIDs的复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于注释的Spring Security
- 下一篇: MySQL常用数据类型小结