mysql gtid基础_MySQL 基础知识梳理学习(四)----GTID
在日常運(yùn)維中,GTID帶來的最方便的作用就是搭建和維護(hù)主從復(fù)制。GTID的主從模式代替了MySQL早期版本中利用二進(jìn)制日志文件的名稱和日志位置的做法,使用GTID使操作和維護(hù)都變得更加簡(jiǎn)潔和可高。
1.GTID的優(yōu)點(diǎn)
(1)基于GTID搭建主從復(fù)制根據(jù)簡(jiǎn)單。
(2)可以確保每個(gè)事務(wù)只會(huì)被執(zhí)行一次。
(3)可以方便的實(shí)現(xiàn)Replication的Failover,不需要像傳統(tǒng)模式復(fù)制那樣去找master_log_file和master_log_pos。
(4)GTID在MGR中也發(fā)揮了中要作用。MGR各節(jié)點(diǎn)之間復(fù)制依賴于GTID,并且在集群節(jié)點(diǎn)進(jìn)行Recover重新加入到集群的操作中,會(huì)選擇其中一個(gè)節(jié)點(diǎn)作為Donor,然后基于Purged的GTID開始同步數(shù)據(jù)。MGR還是通過GTID進(jìn)行沖突驗(yàn)證,用于跟蹤每個(gè)實(shí)例上提交的事務(wù),確定哪些事務(wù)可能有沖突。
2.使用GTID搭建主從時(shí),需要注意的MySQL參數(shù)。
(1)server_id: 設(shè)置MySQL實(shí)例的server_id,每個(gè)實(shí)例的server_id不能一樣。
(2)gtid_mod=ON: MySQL實(shí)例開啟GTID模式。
(3)enforce_gtid_consitency=ON: 使用GTID模式復(fù)制時(shí),需要開啟此參數(shù),用來保證GTID的一致性。
(4)log-bin: MySQL必須開啟Binlog。
(5)log-slave-updates=1: 決定slave從master接受到的更新且執(zhí)行之后,執(zhí)行的Binlog是否記錄到salve的Binlog中,建議開啟。
(6)binlog_format=ROW:強(qiáng)烈建議binlog_format使用ROW格式,其它格式可能造成數(shù)據(jù)不一致。
(7)skip-slave-start=1:當(dāng)salve數(shù)據(jù)庫啟動(dòng)的時(shí)候,salve不會(huì)自動(dòng)開啟復(fù)制。
3.使用GTID的注意事項(xiàng)
由于基于GTID的復(fù)制依賴于事務(wù),所以在使用GTID時(shí),有些MySQL特性不支持。
(1)事務(wù)中混合多個(gè)存儲(chǔ)引擎,會(huì)產(chǎn)生多個(gè)GTID。
當(dāng)使用GTID時(shí),如果在同一個(gè)事務(wù)中,更新包含了非事務(wù)引擎(如MyISAM)和事務(wù)引擎(InnoDB)表的操作,就會(huì)導(dǎo)致多個(gè)GTID分配給同一個(gè)事務(wù)。
(2)主從庫的表存儲(chǔ)引擎不一致,會(huì)導(dǎo)致數(shù)據(jù)不一致。
如果主從庫的存儲(chǔ)引擎不一致,例如一個(gè)是事務(wù)存儲(chǔ)引擎,一個(gè)是非事務(wù)存儲(chǔ)引擎,則會(huì)導(dǎo)致事務(wù)和GTID之間一對(duì)一的關(guān)系被破壞,結(jié)果導(dǎo)致基于GTID的復(fù)制不能正確地運(yùn)行。
(3)基于GTID模式復(fù)制,不支持Create table ...select 語句。
因?yàn)槭褂没谛心J降膹?fù)制時(shí),該語句實(shí)際上被記錄為兩個(gè)單獨(dú)的事件,一個(gè)是創(chuàng)建表,另一個(gè)是將原表中的數(shù)據(jù)插入到剛剛新建的表中。當(dāng)在事務(wù)中執(zhí)行該語句時(shí),在一些情況下。這兩個(gè)事務(wù)可能接收到相同的事務(wù)ID,這意味著包含插入的事務(wù)將被從庫挑過。
(4)不支持Create Temporary table 和 drop temporary table。
使用GTID復(fù)制時(shí),?不支持Create Temporary table 和 drop temporary table。但是,在autocommit=1的情況下可以創(chuàng)建臨時(shí)表,master創(chuàng)建臨時(shí)表不產(chǎn)生GTID信息,所以不會(huì)同步到Salve上,但是刪除臨時(shí)表時(shí),產(chǎn)生GTID會(huì)導(dǎo)致主從中斷。
(5)不推薦在GTID模式的實(shí)例上進(jìn)行mysql_upgrade.
因?yàn)閙ysql_upgrade的過程要?jiǎng)?chuàng)建或修改系統(tǒng)表,而系統(tǒng)表時(shí)非事務(wù)引擎,所以不建議在開啟GTID模式的實(shí)例上使用帶有--write-binlog選項(xiàng)的mysql_upgrade。
(6)一旦在給定的MySQL實(shí)例中提交了事務(wù),具有相同GTID的事務(wù)便會(huì)被該服務(wù)器忽略。而且,在主實(shí)例上提交的事務(wù)在從庫上只可以應(yīng)用一次。
-----主要內(nèi)容參考梳理于網(wǎng)絡(luò)知識(shí),此短文僅為學(xué)習(xí)筆記,在此原創(chuàng)作者感謝!
總結(jié)
以上是生活随笔為你收集整理的mysql gtid基础_MySQL 基础知识梳理学习(四)----GTID的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空港轶事剧情介绍
- 下一篇: k8s pod MySQL环境变量_Ku