欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL多線程復(fù)制遇到Error_code: 1872的解決方案

 更新時(shí)間:2016年09月27日 09:02:36   作者:InsideMySQL  
本文給大家分享的是在使用mysql主從復(fù)制的時(shí)候遇到Error_code: 1872錯(cuò)誤的解決方法,非常的簡單,有需要的小伙伴可以參考下

上周在生產(chǎn)環(huán)境上遇到一個(gè)問題,不敢獨(dú)享,拿出來給小伙伴們做個(gè)簡單的分享。

起因 :由于IDC機(jī)房斷電(估計(jì)又是哪里被挖掘機(jī)碰了下吧),導(dǎo)致所有服務(wù)器重啟,影響到了其中的MySQL數(shù)據(jù)庫。來看下這時(shí)數(shù)據(jù)庫遇到的問題:

數(shù)據(jù)庫版本 :MySQL 5.7.10

問題表現(xiàn)

:從機(jī)復(fù)制報(bào)如下錯(cuò)誤:Slave SQL for channel ”: Slave failed to initialize relay log info structure from the repository, Error_code: 1872

用了Inside君的MySQL標(biāo)準(zhǔn)配置文件模板,怎么沒有實(shí)現(xiàn)crash safe呢?其實(shí),這主要是因?yàn)槎嗑€程復(fù)制(MTS)所引起。不知MySQL 5.7,即使MySQL 5.6也同樣會(huì)遇到問題。

在MTS場景下,可能會(huì)出現(xiàn)以下兩個(gè)問題:

gap事務(wù):后執(zhí)行的事務(wù)先回放(apply)了
Exec_Master_Log_Pos位置不準(zhǔn)確:可能存在已經(jīng)事務(wù)已經(jīng)提交,但是位置還沒更新(單線程復(fù)制不存在此問題)
gap事務(wù)比較好理解,因?yàn)椴徽撌腔赿atabase級(jí)別的MTS,還是基于logical_clock的MTS,都可能存在下面的這種場景:


由于MTS的原因,后面的事務(wù)可能比前面的事務(wù)早執(zhí)行,如上圖終可能事務(wù)tx2和tx4都已經(jīng)提交了,但是事務(wù)tx1和tx3還未提交。這時(shí)就稱為存在gap事務(wù)。在基于logical_clock的MTS場景下,用戶可以通過配置 參數(shù)slave_preserve_commit_order=1 來保證提交的順序性。

另一方面,這時(shí)Exec_Master_Log_Pos也是不準(zhǔn)確的,當(dāng)發(fā)生crash時(shí),master info中依然記錄的是tx1事務(wù)開始執(zhí)行的位置(見上圖右邊的部分)。切記,即使將參數(shù)slave_preserve_commit_order設(shè)置為1,MTS場景下依然不能保證Exec_Master_Log_Pos是準(zhǔn)確的,其稱之為 gap-free low-watermark 。因?yàn)镸TS場景下對(duì)于表slave_realy_info_log的更新并不是事務(wù)的(這個(gè)需要好好體會(huì)下)。

然而,MTS場景下引入了新的事務(wù)表slave_worker_info,用以表示發(fā)生宕機(jī)時(shí)每個(gè)線程更新到的位置,其與Worker線程的回放是事務(wù)的。因此,MySQL在恢復(fù)的時(shí)候可以通過通過Exec_Master_Log_Pos與表slave_worker_info的列Master_log_pos做對(duì)比,判斷是否需要回放當(dāng)前事務(wù)。

在MySQL 5.7.13版本之前,當(dāng)發(fā)生宕機(jī)后需要手動(dòng)執(zhí)行如下操作,若直接執(zhí)行CHANGE MASTER TO操作,則可能會(huì)觸發(fā)上述1872錯(cuò)誤:

START SLAVE UNTIL SQL_AFTER_MTS_GAPS;
START SLAVE SQL_THREAD;

由于服務(wù)器上的MySQL版本為5.7.10,而DBA試圖通過命令CHANGE MASTER TO來修復(fù)復(fù)制問題,因此導(dǎo)致了上述問題。而在MySQL 5.7.13版本后,上述問題將有MySQL自動(dòng)修復(fù)。簡單來說,即使發(fā)生了宕機(jī),也能準(zhǔn)確并自動(dòng)地恢復(fù)復(fù)制的運(yùn)行狀態(tài)。

不過,當(dāng)Inside升級(jí)到MySQL 5.7.15過程時(shí),又遇到了一個(gè)不大不小的坑,這個(gè)就留著等下回分享吧。

相關(guān)文章

  • SELECT INTO 和 INSERT INTO SELECT 兩種表復(fù)制語句簡單介紹

    SELECT INTO 和 INSERT INTO SELECT 兩種表復(fù)制語句簡單介紹

    Insert是T-sql中常用語句,Insert INTO table(field1,field2,...) values(value1,value2,...)這種形式的在應(yīng)用程序開發(fā)中必不可少
    2012-11-11
  • MySql?查詢符合條件的最新數(shù)據(jù)行

    MySql?查詢符合條件的最新數(shù)據(jù)行

    這篇文章主要介紹了MySql?怎么查出符合條件的最新的數(shù)據(jù)行,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • mysql 計(jì)算函數(shù)詳情

    mysql 計(jì)算函數(shù)詳情

    這篇文章主要介紹了mysql 計(jì)算函數(shù),函數(shù)沒有SQL的可移植性強(qiáng) 能運(yùn)行在多個(gè)系統(tǒng)上的代碼稱為可移植的(portable)。相對(duì)來說,多數(shù)SQL語句是可移植的,在SQL實(shí)現(xiàn)之間有差異時(shí),這些差異通常不那么難處理,下面來看看文章的具體內(nèi)容吧
    2021-10-10
  • MySQL數(shù)據(jù)庫中表的操作詳解

    MySQL數(shù)據(jù)庫中表的操作詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL數(shù)據(jù)庫中表常用的一些操作方法,文中的示例代碼講解詳細(xì),?對(duì)我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下
    2022-08-08
  • mysql索引失效的問題

    mysql索引失效的問題

    這篇文章主要介紹了mysql索引失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教<BR>
    2023-08-08
  • MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例

    MySQL數(shù)據(jù)庫多表聯(lián)合查詢代碼示例

    所謂聯(lián)合就是把多個(gè)表的記錄往一起合并,一起進(jìn)行查詢,也叫多表查詢,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫多表聯(lián)合查詢的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Linux下實(shí)現(xiàn)MySQL數(shù)據(jù)備份和恢復(fù)的命令使用全攻略

    Linux下實(shí)現(xiàn)MySQL數(shù)據(jù)備份和恢復(fù)的命令使用全攻略

    這篇文章主要介紹了Linux下實(shí)現(xiàn)MySQL數(shù)據(jù)備份和恢復(fù)的命令使用全攻略,包括使用Mysqldump和LVM快照以及xtrabackup三種方法,傾力推薦!需要的朋友可以參考下
    2015-11-11
  • navicat 8 for mysql建庫的方法

    navicat 8 for mysql建庫的方法

    在本篇文章里小編給大家分享的是關(guān)于navicat 8 for mysql建庫的方法以及相關(guān)知識(shí)點(diǎn),需要的朋友們參考學(xué)習(xí)下。
    2019-08-08
  • 完美解決mysql in條件語句只讀取一條信息問題的2種方案

    完美解決mysql in條件語句只讀取一條信息問題的2種方案

    使用mysql多表查詢時(shí)一個(gè)表中的某個(gè)字段作為另一表的in查詢條件,只能讀取一條信息,而直接用數(shù)字的話可以正常讀取
    2018-04-04
  • Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹

    Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹

    這篇文章主要介紹了Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹,能夠在程序運(yùn)行過程中影響Mysql程序行為的變量稱之為系統(tǒng)變量,想了解更多相關(guān)內(nèi)容的小伙伴可以參考下面文章內(nèi)容
    2022-09-09

最新評(píng)論