MySQL延遲復(fù)制

備注:測(cè)試數(shù)據(jù)庫(kù)版本為MySQL 8.0

這個(gè)blog我們來(lái)聊聊MySQL 延遲復(fù)制

概述

MySQL的復(fù)制一般都很快狭瞎,雖然有時(shí)候因?yàn)?網(wǎng)絡(luò)原因略吨、大事務(wù)等原因造成延遲症副,但是這個(gè)無(wú)法人為控制捏顺。
生產(chǎn)中可能會(huì)存在主庫(kù)誤操作面褐,導(dǎo)致數(shù)據(jù)被刪除了偶芍,Oracle有flashback技術(shù)充择,MySQL官方目前沒(méi)有退出對(duì)應(yīng)的flashback技術(shù)。
此時(shí)匪蟀,我們可以通過(guò)設(shè)置延遲復(fù)制椎麦,設(shè)置從庫(kù)比主庫(kù)慢半個(gè)小時(shí),這個(gè)時(shí)候就可以從從庫(kù)進(jìn)行數(shù)據(jù)恢復(fù)到主庫(kù)了材彪。

MySQL支持延遲復(fù)制观挎,以便從庫(kù)故意執(zhí)行比主庫(kù)晚至少在指定時(shí)間間隔的事務(wù)。在MySQL 8.0中段化,延遲復(fù)制的方法取決于兩個(gè)時(shí)間戳:immediate_commit_timestamp和original_commit_timestamp嘁捷。如果復(fù)制拓?fù)渲械乃蟹?wù)器都運(yùn)行MySQL 8.0.1或更高版本,則使用這些時(shí)間戳測(cè)量延遲復(fù)制显熏。如果從庫(kù)未使用這些時(shí)間戳雄嚣,則執(zhí)行MySQL 5.7的延遲復(fù)制。

復(fù)制延遲默認(rèn)為0秒喘蟆。使用CHANGE MASTER TO MASTER_DELAY = N語(yǔ)句將延遲設(shè)置為N秒缓升。從主庫(kù)接收的事務(wù)比主庫(kù)上的提交至少晚N秒才在從庫(kù)上執(zhí)行。每個(gè)事務(wù)發(fā)生延遲(不是以前MySQL版本中的事件)蕴轨,實(shí)際延遲僅強(qiáng)制在gtid_log_event或anonymous_gtid_log_event事件上港谊。二進(jìn)制日志中的每個(gè)GTID事務(wù)始終都以Gtid_log_event開(kāi)頭,匿名事務(wù)沒(méi)有分配GTID橙弱,MySQL確保日志中的每個(gè)匿名事務(wù)都以Anonymous_gtid_log_event開(kāi)頭歧寺。對(duì)于事務(wù)中的其它事件,不會(huì)對(duì)它們施加任何等待時(shí)間棘脐,而是立即執(zhí)行成福。注意,START SLAVE和STOP SLAVE立即生效并忽略任何延遲荆残,RESET SLAVE將延遲重置為0奴艾。

一.延遲復(fù)制測(cè)試

1.環(huán)境要求

服務(wù)器類別 IP
主庫(kù) 10.31.1.112
從庫(kù) 10.31.1.113

此時(shí)已經(jīng)搭建了異步復(fù)制的主從

2.開(kāi)啟延遲復(fù)制

stop slave sql_thread;
CHANGE MASTER TO MASTER_DELAY = 300;
start slave sql_thread;

主庫(kù)

create table t6 as select * from t4;
select * from t6;
mysql>  create table t6 as select * from t4; 
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> 
mysql> select * from t6;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
+------+------+
1 row in set (0.00 sec)

從庫(kù)

mysql> select remaining_delay from performance_schema.replication_applier_status;
+-----------------+
| remaining_delay |
+-----------------+
|            300 |
+-----------------+
1 row in set (0.01 sec)
mysql> select current_timestamp;
+---------------------+
| current_timestamp   |
+---------------------+
| 2020-07-29 11:00:44 |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from t6;
ERROR 1146 (42S02): Table 'test.t6' doesn't exist
mysql> 
mysql>  select current_timestamp;
+---------------------+
| current_timestamp   |
+---------------------+
| 2020-07-29 11:03:30 |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from t6;
ERROR 1146 (42S02): Table 'test.t6' doesn't exist
mysql> 
mysql> select current_timestamp;
+---------------------+
| current_timestamp   |
+---------------------+
| 2020-07-29 11:05:29 |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from t6;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
+------+------+
1 row in set (0.00 sec)
mysql> select remaining_delay from performance_schema.replication_applier_status;
+-----------------+
| remaining_delay |
+-----------------+
|            NULL |
+-----------------+
1 row in set (0.01 sec)

3.監(jiān)控延遲復(fù)制

在MySQL 8之前的老版本中,監(jiān)控復(fù)制的延遲(滯后)最常用的方法之一是依賴于show slave status輸出中的seconds_behind_master字段内斯。但是蕴潦,當(dāng)使用比傳統(tǒng)主從復(fù)制更復(fù)雜的復(fù)制拓?fù)湎裉洌缃M復(fù)制時(shí),此度量標(biāo)準(zhǔn)不再適用潭苞。MySQL 8中添加的immediate_commit_timestamp和original_commit_timestamp可提供有關(guān)復(fù)制延遲的更精細(xì)的信息忽冻。監(jiān)控支持這些時(shí)間戳的復(fù)制延遲的推薦方法是使用以下performance_schema模式中的表。

replication_connection_status:與主服務(wù)器連接的當(dāng)前狀態(tài)此疹,提供有關(guān)連接線程排隊(duì)到中繼日志中的最后和當(dāng)前事務(wù)的信息僧诚。
replication_applier_status_by_coordinator:協(xié)調(diào)器線程的當(dāng)前狀態(tài),僅在使用多線程復(fù)制時(shí)顯示該信息蝗碎,提供有關(guān)協(xié)調(diào)器線程緩沖到工作隊(duì)列的最后一個(gè)事務(wù)的信息湖笨,以及當(dāng)前正在緩沖的事務(wù)。
replication_applier_status_by_worker:應(yīng)用從主服務(wù)器接收事務(wù)的線程的當(dāng)前狀態(tài)蹦骑,提供有關(guān)應(yīng)用程序線程或使用多線程復(fù)制時(shí)每個(gè)工作線程應(yīng)用的事務(wù)信息慈省。
使用這些表,可以監(jiān)控相應(yīng)線程處理的最后一個(gè)事務(wù)以及該線程當(dāng)前正在處理的事務(wù)的信息眠菇,包括:

事務(wù)的GTID边败。
從庫(kù)中繼日志中檢索的事務(wù)的original_commit_timestamp和immediate_commit_timestamp。
線程開(kāi)始處理事務(wù)的時(shí)間捎废。
對(duì)于上次處理的事務(wù)笑窜,線程完成處理它的時(shí)間。
除Performance Schema表之外登疗,show slave status的輸出還有三個(gè)字段與延遲復(fù)制有關(guān):

SQL_Delay:非負(fù)整數(shù)怖侦,表示使用CHANGE MASTER TO MASTER_DELAY = N配置的復(fù)制延遲,以秒為單位谜叹。與performance_schema.replication_applier_configuration.desired_delay值相同匾寝。
SQL_Remaining_Delay:當(dāng)Slave_SQL_Running_State等待主執(zhí)行事件后的MASTER_DELAY秒時(shí),該字段包含一個(gè)整數(shù)荷腊,表示延遲剩余的秒數(shù)艳悔。在它他時(shí)候,此字段為NULL女仰。與performance_schema.replication_applier_status.remaining_delay值相同猜年。
Slave_SQL_Running_State:一個(gè)字符串,指示SQL線程的狀態(tài)(類似于Slave_IO_State)疾忍。該值與SHOW PROCESSLIST顯示的SQL線程的State值相同乔外。
當(dāng)從庫(kù)的SQL線程在執(zhí)行事件之前等待延遲時(shí),SHOW PROCESSLIST將其狀態(tài)值顯示為:Waiting until MASTER_DELAY seconds after master executed event一罩。

參考文獻(xiàn):

1.https://blog.csdn.net/wzy0623/article/details/90642712

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杨幼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌差购,老刑警劉巖四瘫,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異欲逃,居然都是意外死亡找蜜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門稳析,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洗做,“玉大人,你說(shuō)我怎么就攤上這事彰居〕现剑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵裕菠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我闭专,道長(zhǎng)奴潘,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任影钉,我火速辦了婚禮画髓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘平委。我一直安慰自己奈虾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布廉赔。 她就那樣靜靜地躺著肉微,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜡塌。 梳的紋絲不亂的頭發(fā)上碉纳,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音馏艾,去河邊找鬼劳曹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛琅摩,可吹牛的內(nèi)容都是我干的铁孵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼房资,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜕劝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熙宇,失蹤者是張志新(化名)和其女友劉穎鳖擒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體烫止,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒋荚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了馆蠕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片期升。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖互躬,靈堂內(nèi)的尸體忽然破棺而出播赁,到底是詐尸還是另有隱情,我是刑警寧澤吼渡,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布容为,位于F島的核電站,受9級(jí)特大地震影響寺酪,放射性物質(zhì)發(fā)生泄漏坎背。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一寄雀、第九天 我趴在偏房一處隱蔽的房頂上張望得滤。 院中可真熱鬧,春花似錦盒犹、人聲如沸懂更。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沮协。三九已至,卻和暖如春卓嫂,著一層夾襖步出監(jiān)牢的瞬間皂股,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工命黔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呜呐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓悍募,卻偏偏與公主長(zhǎng)得像蘑辑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坠宴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355