官术网_书友最值得收藏!

前言

從2017年開始,筆者所在的公司開始大量上線MySQL 5.7基于GTID的主從構(gòu)架,在實(shí)際的運(yùn)維工程中,產(chǎn)生了不少問題和疑惑,比如:

· 主從延遲為什么瞬間跳動?

· 延遲為0就一定代表沒有延遲嗎?

· 從庫能和主庫一樣利用索引嗎?

· MTS是如何提高從庫應(yīng)用效率的?

· mysql.gtid_executed表在從庫初始化的時候扮演什么樣的角色?

我們開始結(jié)合源碼來解決問題并解除疑惑。慢慢地,整個主從體系越來越清晰,我們的經(jīng)驗(yàn)也越來越豐富,為了將這些積累的知識和經(jīng)驗(yàn)分享給更多的人,筆者決定撰寫本書,這是本書由來的第一個原因。

從MySQL 5.7.17開始,MySQL官方推出了MGR高可用構(gòu)架,MGR是未來MySQL高可用構(gòu)架發(fā)展的方向,它和主從有著天然的聯(lián)系,比如GTID、Event、SQL線程等基本都是通用的,要深入學(xué)習(xí)MGR,必須先深入學(xué)習(xí)主從原理。為了讓廣大讀者能夠打好學(xué)習(xí)MGR的基礎(chǔ),我更加堅(jiān)定了撰寫本書的想法,這是本書由來的第二個原因。

在MySQL 開源領(lǐng)域,人才濟(jì)濟(jì)、高手如云,優(yōu)秀的著作比比皆是,比如最近我的朋友羅小波、沈剛著的《數(shù)據(jù)生態(tài):MySQL復(fù)制技術(shù)與生產(chǎn)實(shí)踐》就是一本優(yōu)秀的與MySQL主從相關(guān)的書籍,書中的案例可作為本書的補(bǔ)充。我希望以本書為載體和廣大的MySQL愛好者互相交流、互相學(xué)習(xí)、共同進(jìn)步,這是本書由來的最后一個原因。

討論范圍

筆者從2018年開始著手撰寫本書,到2019年中旬初稿完成。在筆者開始學(xué)習(xí)的時候,MySQL的主流版本還是MySQL 5.7,因此本書的所有代碼均限定在MySQL 5.7.22這個版本?,F(xiàn)在回想整個撰寫過程,比我想象的要艱難很多,消耗了我大量的時間和精力。還好有朋友和同事的支持,最終基本完成。由于精力有限,本書不包含半同步部分,實(shí)屬遺憾,如果需要了解半同步部分可以訪問筆者的博客。本書主要討論范圍如下:

· 源碼版本 MySQL 5.7.22。

· 不覆蓋半同步。

· 只考慮參數(shù)master_info_repository和參數(shù)relay_log_info_repository設(shè)置為TABLE的情況。

· 只考慮參數(shù)binlog_format設(shè)置為ROW的情況。

術(shù)語約定

· 行格式:參數(shù)binlog_format設(shè)置為ROW。

· 語句格式:參數(shù)binlog_format設(shè)置為STATEMENT。

· binary log:代表binlog物理文件。

· order commit:代表MYSQL_BIN_LOG::ordered_commit函數(shù),因?yàn)楸緯惺褂妙l率較高,所以做了簡化。

· GTID AUTO_POSITION MODE:代表主從使用的是GTID,同時設(shè)置了master_auto_position=1。

· POSITION MODE:代表主從使用的是傳統(tǒng)位點(diǎn)方式。

· GTID MODE:代表主從使用的是GTID,但是沒有設(shè)置master_auto_position=1。

· 單SQL線程:用來和MTS進(jìn)行區(qū)分,代表只有一個SQL線程進(jìn)行Event的應(yīng)用。

· MTS:Multi-Threaded Slaves的簡稱,包含一個協(xié)調(diào)線程和多個工作線程,Event由工作線程應(yīng)用。

本書結(jié)構(gòu)

深入學(xué)習(xí)主從原理,需要按照一定的順序?qū)W習(xí),如果不知道GTID、不知道Event、不知道主庫如何生成Event,那么肯定不能深入理解主從原理,因此本書按照這種順序進(jìn)行講解。本書一共分為5章,前4章應(yīng)該作為一個整體順序閱讀,第5章和前4章沒有關(guān)聯(lián),可以獨(dú)立閱讀。

· 第1章:介紹GTID相關(guān)的知識點(diǎn),包含GTID的構(gòu)成、GTID模塊的初始化、GTID中的運(yùn)維等知識點(diǎn)。

· 第2章:介紹binary log中的主要Event,從作用、格式講解、實(shí)際解析等幾個維度講解各個Event。

· 第3章:介紹主庫是如何生成Event的,以及DUMP線程是如何通過GTID進(jìn)行主庫binary log定位,并且進(jìn)行Event傳輸?shù)摹?/p>

· 第4章:介紹從庫是如何應(yīng)用Event的,并且還包含了推薦的參數(shù)設(shè)置和Seconds_Behind_Master延遲的相關(guān)知識點(diǎn)。

· 第5章:本章作為知識拓展,講解線程的初步知識、MDL Lock、排序等熱門話題,還包含了與主從相關(guān)的案例。

目標(biāo)讀者

· MySQL DBA。

· MySQL源碼愛好者。

致謝

感謝業(yè)內(nèi)眾多MySQL專家在百忙之中為本書做推薦序,他們是翟衛(wèi)祥、溫正湖、桑櫟、葉金榮、吳炳錫、王偉、黃炎、王英杰、馮光普、李大玉、李真旭、楊建榮、楊奇龍、徐晨亮。

感謝北京中亦安圖科技領(lǐng)導(dǎo)黃遠(yuǎn)邦為本書做封底序。

感謝我的同事戴正勇、楊海波、田興椿、鄒啟建,沒有你們的幫助和支持,本書不可能完成。

感謝電子工業(yè)出版社的孫學(xué)瑛編輯對我寫作的支持,她嚴(yán)謹(jǐn)?shù)膽B(tài)度讓人欽佩。

感謝我的父親高祖恒,妻子顏蕾和兩個可愛的兒子,感謝你們的支持,你們的支持是我最大的動力,我愛你們。

讀者反饋和勘誤

由于筆者能力有限,書中難免存在一些錯誤和不妥,敬請批評和指正。如果您有更多寶貴的意見,請通過如下方式進(jìn)行聯(lián)系和反饋。

郵箱:gaopp_200217@163.com

主站蜘蛛池模板: 安塞县| 仁布县| 沂水县| 红原县| 舒城县| 手游| 天全县| 安达市| 定襄县| 万宁市| 泰州市| 华蓥市| 瑞丽市| 横峰县| 陇南市| 桦甸市| 绥阳县| 临潭县| 无锡市| 兖州市| 司法| 宜兴市| 民权县| 莱阳市| 高雄市| 南汇区| 兰考县| 曲阜市| 隆回县| 仁寿县| 阳东县| 鹤壁市| 安图县| 河东区| 泾阳县| 桂东县| 顺义区| 凤山县| 宁阳县| 镇平县| 和林格尔县|