MySQL主備

MySQL主備數(shù)據(jù)流轉(zhuǎn)流程

主備流轉(zhuǎn)圖

備庫B和主庫A維持了一個長連接
1、在備庫 B 上通過 change master 命令拆祈,設(shè)置主庫 A 的 IP逊脯、端口徘公、用戶名末患、密碼研叫,以及要從哪個位置開始請求 binlog,這個位置包含文件名和日志偏移量璧针。
2嚷炉、在備庫 B 上執(zhí)行 start slave 命令,這時候備庫會啟動兩個線程探橱,就是圖中的 io_thread 和 sql_thread申屹。其中 io_thread 負責與主庫建立連接。
3隧膏、主庫 A 校驗完用戶名哗讥、密碼后,開始按照備庫 B 傳過來的位置胞枕,從本地讀取 binlog杆煞,發(fā)給 B。
4腐泻、備庫 B 拿到 binlog 后决乎,寫到本地文件,稱為中轉(zhuǎn)日志(relay log)贫悄。
5瑞驱、sql_thread 讀取中轉(zhuǎn)日志,解析出日志里的命令窄坦,并執(zhí)行唤反。

binlog的三種格式

statement

當 binlog_format=statement 時,binlog 里面記錄的就是 SQL 語句的原文鸭津。但是對于下列語句全是不安全了彤侍,可能會導(dǎo)致主備不一致,因為如果選擇的索引不一樣逆趋,刪除的行也不一樣

mysql> delete from t /*comment*/  where a>=4 and t_modified<='2018-11-10' limit 1;

row

當 binlog_format 使用 row 格式的時候盏阶,binlog 里面記錄了真實刪除行的主鍵 id,這樣 binlog 傳到備庫去的時候闻书,就肯定會刪除 id=4 的行名斟,不會有主備刪除不同行的問題

mixed statement和row混合

  • 因為有些 statement 格式的 binlog 可能會導(dǎo)致主備不一致,所以要使用 row 格式魄眉。
  • 但 row 格式的缺點是砰盐,很占空間。比如你用一個 delete 語句刪掉 10 萬行數(shù)據(jù)坑律,用 statement 的話就是一個 SQL 語句被記錄到 binlog 中岩梳,占用幾十個字節(jié)的空間。但如果用 row 格式的 binlog,就要把這 10 萬條記錄都寫到 binlog 中冀值。這樣做也物,不僅會占用更大的空間,同時寫 binlog 也要耗費 IO 資源列疗,影響執(zhí)行速度滑蚯。
    因此,MySQL 就取了個折中方案作彤,也就是有了 mixed 格式的 binlog膘魄。mixed 格式的意思是,MySQL 自己會判斷這條 SQL 語句是否可能引起主備不一致竭讳,如果有可能创葡,就用 row 格式,否則就用 statement 格式

當然我要說的是绢慢,現(xiàn)在越來越多的場景要求把 MySQL 的 binlog 格式設(shè)置成 row灿渴。因為恢復(fù)數(shù)據(jù)會比較方便,能清晰地恢復(fù)對應(yīng)id的數(shù)據(jù)胰舆,而statement則不好做骚露。

循環(huán)復(fù)制問題

雙 Master 結(jié)構(gòu)循環(huán)同步binlog問題:

  • 規(guī)定兩個庫的 server id 必須不同,如果相同缚窿,則它們之間不能設(shè)定為主備關(guān)系棘幸;
  • 一個備庫接到 binlog 并在重放的過程中,生成與原 binlog 的 server id 相同的新的 binlog倦零;
  • 每個庫在收到從自己的主庫發(fā)過來的日志后误续,先判斷 server id,如果跟自己的相同扫茅,表示這個日志是自己生成的蹋嵌,就直接丟棄這個日志。

日志在備庫上的執(zhí)行葫隙,就是圖中備庫上 sql_thread 更新數(shù)據(jù) (DATA) 的邏輯栽烂。如果是用單線程的話,就會容易導(dǎo)致備庫應(yīng)用日志不夠快恋脚,造成主備延遲腺办。

在官方的 5.6 版本之前,MySQL 只支持單線程復(fù)制糟描,由此在主庫并發(fā)高菇晃、TPS 高時就會出現(xiàn)嚴重的主備延遲問題。

多線程復(fù)制模型

官方 MySQL5.6 版本蚓挤,支持了并行復(fù)制,只是支持的粒度是按庫并行。理解了上面介紹的按表分發(fā)策略和按行分發(fā)策略灿意,你就理解了估灿,用于決定分發(fā)策略的 hash 表里,key 就是數(shù)據(jù)庫名缤剧。

參考:https://time.geekbang.org/column/article/76446

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馅袁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荒辕,更是在濱河造成了極大的恐慌汗销,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抵窒,死亡現(xiàn)場離奇詭異弛针,居然都是意外死亡,警方通過查閱死者的電腦和手機李皇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門削茁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掉房,你說我怎么就攤上這事茧跋。” “怎么了瘾杭?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哪亿。 經(jīng)常有香客問我粥烁,道長,這世上最難降的妖魔是什么锣夹? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任页徐,我火速辦了婚禮,結(jié)果婚禮上银萍,老公的妹妹穿的比我還像新娘变勇。我一直安慰自己,他們只是感情好贴唇,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布搀绣。 她就那樣靜靜地躺著,像睡著了一般戳气。 火紅的嫁衣襯著肌膚如雪链患。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天瓶您,我揣著相機與錄音麻捻,去河邊找鬼纲仍。 笑死,一個胖子當著我的面吹牛贸毕,可吹牛的內(nèi)容都是我干的郑叠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼明棍,長吁一口氣:“原來是場噩夢啊……” “哼乡革!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摊腋,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤沸版,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后兴蒸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體视粮,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年类咧,在試婚紗的時候發(fā)現(xiàn)自己被綠了馒铃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡痕惋,死狀恐怖区宇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情值戳,我是刑警寧澤议谷,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站堕虹,受9級特大地震影響卧晓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赴捞,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一逼裆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赦政,春花似錦胜宇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掰派,卻和暖如春从诲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背靡羡。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工系洛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俊性,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓碎罚,卻偏偏與公主長得像磅废,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荆烈,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容