自序


相信作為一名DBA來講MySQL主從一直都是一個繞不開的話題,我們在很多高可用構(gòu)架中都能看到它的身影膛薛。在我們心中一定都或多或少的產(chǎn)生過一些疑問寂屏,比如:

  • 主從延遲為什么會高词顾?
  • 主從延遲為什么一直不動炸裆?
  • 主從延遲為什么瞬間跳動垃它?
  • 延遲為0就一定代表沒有延遲嗎?
  • 從庫異常重啟為什么會報錯?
  • 從庫能和主庫一樣利用索引嗎国拇?
  • MTS是如何提高從庫應(yīng)用效率的洛史?
  • 為什么會有那么多和從庫相關(guān)的sync參數(shù),我該怎么配置酱吝?
  • mysql.gtid_executed表有什么用也殖?
    ......

這個系列就是想通過描述主從原理,抽絲剝繭解開大家對這些問題的疑惑务热。我認(rèn)為如果要深入學(xué)習(xí)主從原理需要按照一定的順序進(jìn)行學(xué)習(xí)忆嗜,如果不知道GTID、不知道Event陕习、不知道主庫如何生成Event的霎褐,那么肯定不能深入理解主從原理 址愿,因此本系列按照這種順序講解该镣。本系列一共分為5個部分如下:

第一部分 GTID相關(guān) 第1節(jié): GTID的基本概念
第2節(jié): mysql.gtid_executed表/gtid_executed變量/gtid_purged變量的更改時機(jī)
第3節(jié): GTID模塊初始化簡介和參數(shù)binlog_gtid_simple_recovery
第4節(jié): GTID中的運維
第二部分 Event相關(guān) 第5節(jié): Binary log Event 的總體格式
第6節(jié): 重點Event FORMAT_DESCRIPTION_EVENT/PREVIOUS_GTIDS_LOG_EVENT
第7節(jié): 重點Event GTID_LOG_EVENT
第8節(jié): 重點Event QUERY_EVENT/MAP_EVENT
第9節(jié): 重點Event WRITE_ROWS_EVENT/DELETE_ROWS_EVENT
第10節(jié):重點Event UPDATE_ROWS_EVENT/XID_EVENT
第11節(jié):參數(shù)binlog_row_image的影響
第12節(jié):巧用Event發(fā)現(xiàn)問題
第三部分 主庫相關(guān) 第13節(jié):binlog cache簡介
第14節(jié):事務(wù)Event的生成和寫入流程
第15節(jié):MySQL層事務(wù)提交流程簡析
第16節(jié):基于WRITESET的并行復(fù)制方式
第17節(jié):主庫的DUMP線程
第18節(jié):DUMP線程查找和過濾GTID的基本算法
第四部分 從庫相關(guān) 第19節(jié):從庫MTS多線程并行回放(一)
第20節(jié):從庫MTS多線程并行回放(二)
第21節(jié):MTS中GAP測試和參數(shù)slave_preserve_commit_order
第22節(jié):從庫的IO線程
第23節(jié):從庫的SQL線程(MTS協(xié)調(diào)線程)和參數(shù)sql_slave_skip_counter
第24節(jié):從庫數(shù)據(jù)的查找和參數(shù)slave_rows_search_algorithms
第25節(jié):從庫的關(guān)閉和恢復(fù)流程
第26節(jié):合理的從庫設(shè)置
第27節(jié):從庫Seconds_Behind_Master的計算方式
第28節(jié):從庫Seconds_Behind_Master延遲總結(jié)
第五部分 其他 第29節(jié):線程簡介和MySQL調(diào)試環(huán)境搭建
第30節(jié):Delete與Insert 死鎖案例分析
第31節(jié):Innodb Buffer Pool的三種Page和鏈表
第32節(jié):利用performance_schema獲取造成死鎖的語句

其中:

  • 前面29節(jié)由我獨自編寫。
  • 第30節(jié)和第31節(jié)分別由我的朋友楊奇龍和王航威編寫响谓,他們都是有贊的DBA损合,在平時的交流中我感到他們涉獵之廣是我不能及的。
  • 第32節(jié)由我的同事田興椿編寫娘纷,在平時的工作和學(xué)習(xí)中他總是能找到一些讓我詫異的案例嫁审,然后一起學(xué)習(xí)研究。

討論范圍和約定

本系列使用源碼版本為Percona 5.7.22赖晶,因此討論的范圍肯定是5.7版本律适。
本系列雖然包含了主從中的大部分知識點,但是仍然有部分內(nèi)容沒有覆蓋遏插,如下:

  • 不覆蓋半同步捂贿。
  • 只考慮master_info_repository和relay_log_info_repository設(shè)置為‘table’的情況。
  • 只考慮binlog_format設(shè)置為‘row’的情況胳嘲。

本系列約定如下:

  • 行格式:binlog_format設(shè)置為‘row’厂僧。
  • 語句格式:binlog_format設(shè)置為‘statement’。
  • binary log:這里代表是我們常說的binlog物理文件了牛。
  • order commit:代表的是‘MYSQL_BIN_LOG::ordered_commit’函數(shù)颜屠,因為本系列中使用頻率很高因此做了簡化。將會在15節(jié)詳細(xì)它的流程鹰祸。
  • GTID AUTO_POSITION MODE:代表主從使用的是GTID同時使用了master_auto_position=1甫窟。
  • POSITION MODE:代表主從使用的是傳統(tǒng)的位點模式。
  • 單SQL線程:用來和MTS進(jìn)行區(qū)分蛙婴,代表只有一個SQL線程進(jìn)行Event的應(yīng)用蕴坪。
  • MTS:‘multi-threaded slaves’的簡稱,包含一個協(xié)調(diào)線程和多個工作線程,Event由工作線程應(yīng)用背传。

編寫方式

在編寫之初有些朋友建議我不寫源碼而有些朋友建議我多貼些代碼呆瞻,因此我做了一下綜合,整個系列中我會給出一些源碼接口和必要的源碼證明径玖,但是不會貼很多源碼和棧幀痴脾。有些章節(jié)會包含一個筆記放到我的簡書,這個筆記就是我學(xué)習(xí)的時候記錄的源碼調(diào)用順序和一些棧幀供自己復(fù)習(xí)之用也供想了解源碼的朋友查看梳星,但是可讀性不是那么好赞赖。如果對源碼不感興趣的朋友可以跳過這些源碼接口和代碼,我認(rèn)為這并不會影響閱讀的連續(xù)性冤灾。

注意

  • 本系列是基于MySQL 5.7編寫的前域。
  • 本系列將開放部分章節(jié)用于讀者試讀。
  • 由于作者能力有限雖然我盡量保證嚴(yán)謹(jǐn)韵吨,但是錯誤在所難免匿垄。如果發(fā)現(xiàn)錯誤可以聯(lián)系我,我會驗證后進(jìn)行更改归粉〈涣疲可以加入QQ群556787677進(jìn)行交流。
  • 虛擬物品概不退款糠悼。
  • 歡迎加入QQ群 556787677

因此請讀者確認(rèn)后購買届榄。

感謝

非常感謝翟衛(wèi)祥、葉金榮倔喂、吳炳錫铝条、李真旭、楊奇龍百忙之中為本系列作推薦序席噩,特別感謝葉金榮為本系列校稿班缰。

最后希望我的兩個兒子能夠健康快樂的成長。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末班挖,一起剝皮案震驚了整個濱河市鲁捏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萧芙,老刑警劉巖给梅,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異双揪,居然都是意外死亡动羽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門渔期,熙熙樓的掌柜王于貴愁眉苦臉地迎上來运吓,“玉大人渴邦,你說我怎么就攤上這事【猩冢” “怎么了谋梭?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長倦青。 經(jīng)常有香客問我瓮床,道長,這世上最難降的妖魔是什么产镐? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任隘庄,我火速辦了婚禮,結(jié)果婚禮上癣亚,老公的妹妹穿的比我還像新娘丑掺。我一直安慰自己,他們只是感情好述雾,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布街州。 她就那樣靜靜地躺著,像睡著了一般绰咽。 火紅的嫁衣襯著肌膚如雪菇肃。 梳的紋絲不亂的頭發(fā)上地粪,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天取募,我揣著相機(jī)與錄音,去河邊找鬼蟆技。 笑死玩敏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的质礼。 我是一名探鬼主播旺聚,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼眶蕉!你這毒婦竟也來了砰粹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤造挽,失蹤者是張志新(化名)和其女友劉穎碱璃,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饭入,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嵌器,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年谐丢,在試婚紗的時候發(fā)現(xiàn)自己被綠了爽航。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚓让。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖历极,靈堂內(nèi)的尸體忽然破棺而出衷佃,到底是詐尸還是另有隱情,我是刑警寧澤衰腌,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布右蕊,位于F島的核電站饶囚,受9級特大地震影響鸠补,放射性物質(zhì)發(fā)生泄漏萝风。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一紫岩、第九天 我趴在偏房一處隱蔽的房頂上張望规惰。 院中可真熱鬧,春花似錦泉蝌、人聲如沸歇万。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贪磺。三九已至,卻和暖如春诅愚,著一層夾襖步出監(jiān)牢的瞬間寒锚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工违孝, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留刹前,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓等浊,卻偏偏與公主長得像腮郊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筹燕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351