濮阳杆衣贸易有限公司

主頁 > 知識庫 > MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的

MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的

熱門標(biāo)簽:南昌三維地圖標(biāo)注 地圖標(biāo)注費(fèi)用是多少 百應(yīng)電話機(jī)器人優(yōu)勢 電話外呼系統(tǒng)改號 啥是企業(yè)400電話辦理 外呼系統(tǒng)打電話上限是多少 曲靖移動外呼系統(tǒng)公司 武漢網(wǎng)絡(luò)外呼系統(tǒng)服務(wù)商 怎樣在地圖標(biāo)注銷售區(qū)域

不知道大家想過這個問題沒有?如果配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的,因為在數(shù)據(jù)雙活的設(shè)計方案中,這可以算是方案的核心設(shè)計思想之一。

如果主庫觸發(fā)SQL語句:

insert into test_data(name) values(‘a(chǎn)a');

那么Master1生成binlog,推送數(shù)據(jù)變化到Master2,在Master2上面生成relay log,然后交由sql thread進(jìn)行變更重放,反之也是類似的流程,整個流程可以這樣描述。

如果Master2消費(fèi)了relay的數(shù)據(jù),然后會產(chǎn)生binlog(log_slave_updates默認(rèn)開啟),這個時候產(chǎn)生的binlog會繼續(xù)推送到Master1消費(fèi),然后來來回回推送,一套insert語句就無窮無盡了,顯然這種設(shè)計是不合理的,MySQL也肯定不會這么做。

那么問題的關(guān)鍵的部分就是:Master2是否推送了先前的binlog到Master1?

a) 如果推送了,Master1是如何過濾,避免后續(xù)無限循環(huán)

b) 如果沒有推送,Master2是如何過濾的

如果要理解這個過程,我們就需要模擬測試,查看數(shù)據(jù)流轉(zhuǎn)過程中的binlog情況,可以參考這個流程。

1) Master1的binlog

2) Master2的 relay log

3) Master的binlog

很快就部署好了一套主從環(huán)境,然后添加change master to 就快速搭建好了一套測試的雙主環(huán)境。

為了盡可能看到完整的binlog事件信息,我們開啟參數(shù)binlog_rows_query_log_events

在Master1觸發(fā)語句:

insert into test_data(name) values(‘gg');

得到的binlog事件如下,可以清楚的看到相關(guān)的SQL語句。

在Master2端,我們查看binlog的情況,在開啟binlog_rows_query_log_events的前提下會看到明顯少了事件:Rows_query.

此時需要思考的是,在這個過程中偏移量是否發(fā)生了變化,從Master1產(chǎn)生的binlog到Master的relay log,如果通過mysqlbinlog去解析,得到的偏移量情況都是一模一樣,而在Master2消費(fèi)后,產(chǎn)生了相關(guān)的binlog信息。

問題的關(guān)鍵就在這里,在Maser2里面是通過Server_id來標(biāo)注了數(shù)據(jù)的源頭,所以在這里就稱為整個數(shù)據(jù)流轉(zhuǎn)的終點了,也就意味著數(shù)據(jù)復(fù)制的時候是按照server_id來進(jìn)行U過濾的,每個Master端只會傳送自己相關(guān)的binlog信息。

如果從這個角度來說,MySQL對于復(fù)制中的server_id如此重要的一個原因就是基于此。

而如果換一個角度,看待基于偏移量的異步復(fù)制,其實也可以得到類似的信息。

這是Master1觸發(fā)insert語句后的binlog細(xì)節(jié)。

這是Master2接受實時數(shù)據(jù)后的binlog細(xì)節(jié)。

其實看到這里,還存在一個問題,那就是在偏移量模式下,如果需要一個數(shù)據(jù)變更操作在Master2丟失了,那么是沒有辦法進(jìn)行回溯的。

而基于GTID模式可以唯一性標(biāo)識全局事務(wù),那么哪怕對這個操作進(jìn)行了重復(fù)應(yīng)用,哪怕是DDL語句,操作的影響行數(shù)也是0.

我們對一個已經(jīng)執(zhí)行的操作進(jìn)行再次應(yīng)用,看看MySQL是否會自動舍棄該類操作。

mysql> SET @@SESSION.GTID_NEXT= '6fb744dd-05dd-11ea-ada7-52540043a8b5:6';

Query OK, 0 rows affected (0.00 sec)

mysql> use `test`; create table test_data (id int primary key auto_increment,name varchar(30));

Database changed

Query OK, 0 rows affected (0.00 sec)

查看show binlog events發(fā)現(xiàn)這個過程不會產(chǎn)生額外的binlog。

所以基于此,我們也基本明確了數(shù)據(jù)回環(huán)解決方法的一個設(shè)計思想,那就是如何讓MySQL能夠識別出那些已經(jīng)應(yīng)用的事務(wù)數(shù)據(jù),我想GTID是一個答案,而且分布式ID不用,這是MySQL內(nèi)部的處理機(jī)制,而且是MySQL能夠識別的方式。

以上就是MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的的詳細(xì)內(nèi)容,更多關(guān)于MySQL 避免數(shù)據(jù)回環(huán)沖突的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL 5.7雙主同步部分表的實現(xiàn)過程詳解
  • MySQL雙主(主主)架構(gòu)配置方案

標(biāo)簽:吉林 資陽 荊州 隨州 黑河 錦州 滄州 甘南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的》,本文關(guān)鍵詞  MySQL,配置,了,雙主,是,如何,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    偏关县| 白水县| 临邑县| 万山特区| 东乡| 桓仁| 宜川县| 潼关县| 嘉兴市| 永年县| 桐柏县| 靖州| 正阳县| 克拉玛依市| 新竹县| 利津县| 维西| 陈巴尔虎旗| 广南县| 甘南县| 文登市| 留坝县| 孟村| 山阳县| 阳曲县| 白河县| 新竹县| 延边| 绥江县| 玉林市| 慈利县| 农安县| 娱乐| 蕲春县| 津南区| 丹棱县| 集安市| 砚山县| 麻栗坡县| 襄垣县| 镇赉县|