注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)數(shù)據(jù)庫(kù)深入理解MySQL主從原理

深入理解MySQL主從原理

深入理解MySQL主從原理

定 價(jià):¥89.00

作 者: 高鵬 著
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787121406584 出版時(shí)間: 2021-03-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 268 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  在超大規(guī)模流量的分布式系統(tǒng)環(huán)境下,無(wú)論是從系統(tǒng)性能的角度,還是從數(shù)據(jù)安全性的角度,掌握MySQL主從原理,都是當(dāng)下技術(shù)人員的必備基本功。MySQL主從原理是高可用架構(gòu)的基石,即便是MGR這種集群架構(gòu)也可以看到主從的影子。要解決一個(gè)問(wèn)題或者故障,最快的方式就是了解它的原理,快速定位問(wèn)題。本書從源碼層面抽絲剝繭般地描述MySQL主從原理,全面地介紹了GTID相關(guān)的知識(shí)點(diǎn),并解析了主要Event的生成、作用和格式,以及線程的初步知識(shí)、MDL LOCK、排序等熱門話題和主從相關(guān)的案例。無(wú)論是MySQL DBA和MySQL源碼愛(ài)好者,還是剛進(jìn)入數(shù)據(jù)庫(kù)行業(yè)的小白讀者,通過(guò)閱讀本書,都能通過(guò)源碼級(jí)分析,更好地理解和使用MySQL主從復(fù)制技術(shù)。

作者簡(jiǎn)介

  高鵬(網(wǎng)名八怪),現(xiàn)任中亦安圖科技有限公司數(shù)據(jù)庫(kù)專家,2008年開(kāi)始從事Oracle/MySQL相關(guān)工作,Oracle OCM、MySQL源碼愛(ài)好者,知數(shù)堂8期學(xué)員。有豐富的數(shù)據(jù)庫(kù)性能調(diào)優(yōu)、故障診斷經(jīng)驗(yàn)。

圖書目錄

第1章 GTID\t1
1.1 GTID的基本概念\t1
1.1.1 GTID的作用\t1
1.1.2 GTID的基本表示\t1
1.1.3 server_uuid的生成\t2
1.1.4 GTID的生成\t2
1.1.5 GTID_EVENT和PREVIOUS_GTIDS_LOG_EVENT簡(jiǎn)介\t3
1.1.6 gtid_executed表的作用\t4
1.2 mysql.gtid_executed表、gtid_executed變量、gtid_purged變量的修改時(shí)機(jī)\t5
1.2.1 定義\t5
1.2.2 主庫(kù)修改時(shí)機(jī)\t7
1.2.3 從庫(kù)修改時(shí)機(jī)\t8
1.2.4 通用修改時(shí)機(jī)\t10
1.2.5 通用修改時(shí)機(jī)源碼函數(shù)簡(jiǎn)析\t10
1.3 GTID模塊初始化簡(jiǎn)介和參數(shù)binlog_gtid_simple_recovery\t11
1.3.1 GTID模塊初始化流程圖\t12
1.3.2 步驟解析\t13
1.4 GTID中的運(yùn)維\t16
1.4.1 跳過(guò)一個(gè)事務(wù)\t17
1.4.2 mysqldump導(dǎo)出行為的改變\t17
1.4.3 搭建GTID AUTO_POSITION MODE的主從\t18
1.4.4 主從切換\t20
1.4.5 參數(shù)gitd_mode的含義\t21
1.4.6 在線開(kāi)啟GTID\t21
1.4.7 離線開(kāi)啟GTID\t22
1.4.8 開(kāi)啟GTID的注意事項(xiàng)\t23
1.4.9 統(tǒng)計(jì)值ONGOING_ANONYMOUS_TRANSACTION_COUNT的變更時(shí)機(jī)\t23
1.4.10 設(shè)置MASTER_AUTO_POSITION = 1的影響\t25
1.4.11 離線開(kāi)啟GTID丟失數(shù)據(jù)的測(cè)試\t25
第2章 Event\t28
2.1 binary log Event 的總體格式\t28
2.1.1 引言\t28
2.1.2 binary log綜述\t28
2.1.3 Event的總體格式\t29
2.1.4 Event header和Event footer\t29
2.1.5 具體解析\t30
2.1.6 本書涉及的Event類型\t31
2.2 重點(diǎn)Event之FORMAT_DESCRIPTION_EVENT和
PREVIOUS_GTIDS_LOG_EVENT\t32
2.2.1 FORMAT_DESCRIPTION_EVENT\t32
2.2.2 PREVIOUS_GTIDS_LOG_EVENT\t35
2.3 重點(diǎn)Event之GTID_EVENT\t39
2.3.1 GTID_EVENT的作用\t39
2.3.2 源碼重要接口\t40
2.3.3 主體格式\t40
2.3.4 簡(jiǎn)單解析\t41
2.3.5 生成時(shí)機(jī)\t41
2.3.6 ANONYMOUS_GTID_EVENT\t41
2.3.7 GTID的三種模式\t42
2.4 重點(diǎn)Event之QUERY_EVENT和MAP_EVENT\t43
2.4.1 QUERY_EVENT\t43
2.4.2 MAP_EVENT\t46
2.5 重點(diǎn)Event之WRITE_EVENT和DELETE_EVENT\t51
2.5.1 WRITE_EVENT\t51
2.5.2 DELETE_EVENT\t57
2.6 重點(diǎn)Event之UPDATE_EVENT和XID_EVENT\t61
2.6.1 UPDATE_ROWS_EVENT\t61
2.6.2 XID_EVENT\t66
2.7 參數(shù)binlog_row_image的影響\t68
2.7.1 參數(shù)影響\t68
2.7.2 過(guò)濾方式\t70
2.7.3 DML Event中的標(biāo)識(shí)\t70
2.8 巧用Event發(fā)現(xiàn)問(wèn)題\t73
2.8.1 工具簡(jiǎn)介\t73
2.8.2 分析長(zhǎng)期未提交的事務(wù)\t74
2.8.3 分析大事務(wù)\t75
2.8.4 分析binary log中Event的生成速度\t75
2.8.5 分析每個(gè)表生成了多少個(gè)DML Event\t75
2.8.6 工具展示\t75
第3章 主庫(kù)\t79
3.1 binlog cache簡(jiǎn)介\t79
3.1.1 binlog cache綜述\t79
3.1.2 使用binlog cache的流程\t80
3.1.3 參數(shù)binlog_cache_size的作用及其初始化\t80
3.1.4 臨時(shí)文件的分配和使用\t81
3.1.5 參數(shù)max_binlog_cache_size的作用\t82
3.1.6 如何觀察到臨時(shí)文件\t82
3.2 事務(wù)Event的生成和寫入流程\t83
3.2.1 流程綜述\t83
3.2.2 刪除階段流程\t85
3.2.3 提交階段流程\t85
3.2.4 兩個(gè)注意點(diǎn)\t86
3.3 MySQL層事務(wù)提交流程簡(jiǎn)析\t86
3.3.1 參數(shù)設(shè)置\t86
3.3.2 總體流程圖\t87
3.3.3 步驟解析第一階段\t90
3.3.4 步驟解析第二階段(FLUSH階段)\t90
3.3.5 步驟解析第三階段(SYNC階段)\t92
3.3.6 步驟解析第四階段(COMMIT階段)\t93
3.3.7 步驟解析第五階段\t94
3.3.8 提交階段的注意點(diǎn)\t95
3.4 基于WRITESET的并行復(fù)制方式\t95
3.4.1 奇怪的last commit\t96
3.4.2 WRITESET是什么\t96
3.4.3 WRITESET的生成\t97
3.4.4 add_pke函數(shù)的流程\t98
3.4.5 WRITESET設(shè)置對(duì)last commit的處理方式\t99
3.4.6 WRITESET的歷史MAP\t100
3.4.7 WRITESET的并行復(fù)制對(duì)last commit的處理流程\t100
3.4.8 WRITESET_SESSION的方式\t104
3.4.9 關(guān)于參數(shù)binlog_transaction_dependency_history_size的說(shuō)明\t104
3.4.10 沒(méi)有主鍵的情況\t104
3.4.11 為什么同一個(gè)session執(zhí)行的事務(wù)能生成同樣的last commit\t105
3.4.12 WRITESET并行復(fù)制方式的優(yōu)缺點(diǎn)\t105
3.5 主庫(kù)的DUMP線程\t106
3.5.1 POSITION MODE和GTID AUTO_POSITION MODE的不同點(diǎn)\t106
3.5.2 流程圖\t108
3.5.3 步驟解析\t109
3.5.4 重點(diǎn)說(shuō)明\t112
3.6 DUMP線程查找和過(guò)濾GTID的基本算法\t113
3.6.1 環(huán)境假設(shè)\t113
3.6.2 檢查從庫(kù)的GTID是否大于主庫(kù)的GTID\t114
3.6.3 檢查需要的binary log是否已經(jīng)清理\t114
3.6.4 實(shí)際掃描binary log\t115
3.6.5 GTID過(guò)濾\t115
第4章 從庫(kù)\t117
4.1 從庫(kù)MTS多線程并行回放(一)\t117
4.1.1 MTS綜述\t117
4.1.2 協(xié)調(diào)線程的分發(fā)機(jī)制\t118
4.1.3 步驟解析\t120
4.1.4 并行回放判定一例\t124
4.2 從庫(kù)MTS多線程并行回放(二)\t126
4.2.1 工作線程執(zhí)行Event\t126
4.2.2 MTS檢查點(diǎn)中的重要概念\t127
4.2.3 MTS中執(zhí)行檢查點(diǎn)的流程\t132
4.2.4 MTS的關(guān)鍵點(diǎn)\t136
4.3 MTS中的“gap”測(cè)試和參數(shù)lave_preserve_commit_ order\t136
4.3.1 MTS中的“gap”測(cè)試\t136
4.3.2 參數(shù)slave_preserve_commit_order的影響\t138
4.4 從庫(kù)的I/O線程\t139
4.4.1 引入\t139
4.4.2 I/O線程的啟動(dòng)流程圖\t140
4.4.3 流程解析\t142
4.5 從庫(kù)的SQL線程(MTS協(xié)調(diào)線程)和參數(shù)sql_slave_skip_counter\t146
4.5.1 SQL線程的功能\t146
4.5.2 流程圖\t146
4.5.3 重要步驟說(shuō)明\t148
4.5.4 各個(gè)Event做了什么\t151
4.6 從庫(kù)數(shù)據(jù)的查找和參數(shù)slave_rows_search_algorithms\t153
4.6.1 從一個(gè)例子出發(fā)\t153
4.6.2 確認(rèn)查找數(shù)據(jù)的方式\t156
4.6.3 ROW_LOOKUP_HASH_SCAN方式的數(shù)據(jù)查找\t159
4.6.4 從庫(kù)數(shù)據(jù)查找的要點(diǎn)\t161
4.7 從庫(kù)的關(guān)閉和異?;謴?fù)流程\t162
4.7.1 正常的stop slave流程\t162
4.7.2 stop slave為什么會(huì)慢\t163
4.7.3 從庫(kù)啟動(dòng)需要讀取的信息\t164
4.7.4 關(guān)于repository表的事務(wù)性\t165
4.7.5 相關(guān)參數(shù)\t166
4.7.6 恢復(fù)流程\t167
4.8 安全高效的從庫(kù)設(shè)置\t170
4.8.1 從庫(kù)參數(shù)設(shè)置建議\t170
4.8.2 單SQL線程模式\t171
4.8.3 MTS\t174
4.8.4 一個(gè)非安全設(shè)置的例子\t176
4.8.5 參數(shù)sync_relay_log的影響\t177
4.9 從庫(kù)Seconds_Behind_Master的計(jì)算方式\t177
4.9.1 Seconds_Behind_Master的計(jì)算方式\t178
4.9.2 影響Seconds_Behind_Master的因素\t178
4.9.3 不同操作計(jì)算延遲的方式\t181
4.9.4 MTS中Seconds_Behind_Master計(jì)算誤差測(cè)試\t181
4.9.5 手動(dòng)修改系統(tǒng)時(shí)間導(dǎo)致Seconds_Behind_Master為0\t183
4.10 Seconds_Behind_Master延遲場(chǎng)景歸納\t185
4.10.1 延遲場(chǎng)景\t185
4.10.2 相關(guān)測(cè)試\t186
4.10.3 延遲診斷的方法論\t189
第5章 案例解析\t190
5.1 線程簡(jiǎn)介和MySQL調(diào)試環(huán)境搭建\t190
5.1.1 線程簡(jiǎn)介\t190
5.1.2 PID、LWP ID、Thread TID\t192
5.1.3 MySQL線程和系統(tǒng)LWP ID的關(guān)系\t193
5.1.4 調(diào)試環(huán)境的搭建\t194
5.1.5 調(diào)試環(huán)境的使用\t197
5.2 MySQL排序詳細(xì)解析\t198
5.2.1 為什么要討論排序\t198
5.2.2 從一個(gè)問(wèn)題出發(fā)\t199
5.2.3 測(cè)試案例\t200
5.2.4 階段1:確認(rèn)排序字段及順序\t202
5.2.5 階段2:計(jì)算sort字段長(zhǎng)度\t202
5.2.6 階段3:計(jì)算額外字段的空間\t203
5.2.7 階段4:確認(rèn)每行的長(zhǎng)度\t205
5.2.8 階段5:確認(rèn)最大內(nèi)存分配\t206
5.2.9 階段6:讀取數(shù)據(jù)進(jìn)行內(nèi)存排序\t207
5.2.10 階段7:排序方式總結(jié)輸出\t210
5.2.11 階段8:進(jìn)行最終排序\t211
5.2.12 排序的其他問(wèn)題\t212
5.2.13 使用OPTIMIZER_TRACE查看排序信息\t214
5.2.14 回到問(wèn)題本身\t215
5.2.15 答疑\t217
5.3 MySQL中的MDL Lock簡(jiǎn)介\t219
5.3.1 MDL Lock綜述\t219
5.3.2 重要數(shù)據(jù)結(jié)構(gòu)和概念\t220
5.3.3 為MDL Lock增加打印函數(shù)\t225
5.3.4 在合適的位置增加打印函數(shù)\t227
5.3.5 常見(jiàn)MDL Lock類型的加鎖測(cè)試\t229
5.4 奇怪的FTWRL堵塞案例\t237
5.4.1 兩個(gè)不同的現(xiàn)象\t237
5.4.2 sleep 函數(shù)生效點(diǎn)\t239
5.4.3 FTWRL做了什么工作\t240
5.4.4 例5-3步驟解析\t242
5.4.5 例5-4步驟解析\t243
5.4.6 FTWRL堵塞和被堵塞的簡(jiǎn)單總結(jié)\t244
5.5 產(chǎn)生大量小relay log故障案例\t245
5.5.1 案例現(xiàn)象\t245
5.5.2 參數(shù)slave_net_timeout分析\t245
5.5.3 原因剖析\t246
5.5.4 案例模擬\t246
5.5.5 實(shí)現(xiàn)方式\t248
5.6 從庫(kù)system lock原因簡(jiǎn)析\t250
5.6.1 binary log的寫入時(shí)間和Event中的時(shí)間\t250
5.6.2 問(wèn)題由來(lái)\t251
5.6.3 從庫(kù)system lock延遲的原因\t251
5.6.4 system lock問(wèn)題分析\t252
5.6.5 模擬測(cè)試\t253

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)