深入理解MySQL主從原理 版權(quán)信息
- ISBN:9787121406584
- 條形碼:9787121406584 ; 978-7-121-40658-4
- 裝幀:一般膠版紙
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>>
深入理解MySQL主從原理 本書特色
MySQL主從原理是高可用架構(gòu)的基石。 本書徹底地分析了MySQL主從原理。 本書是作者多年來研究MySQL原理和實(shí)踐的成果。 MySQL從業(yè)人員應(yīng)人手一本備在身邊,以防不時(shí)之需。
深入理解MySQL主從原理 內(nèi)容簡介
在超大規(guī)模流量的分布式系統(tǒng)環(huán)境下,無論是從系統(tǒng)性能的角度,還是從數(shù)據(jù)安全性的角度,掌握MySQL主從原理,都是當(dāng)下技術(shù)人員的推薦基本功。MySQL主從原理是高可用架構(gòu)的基石,即便是MGR這種集群架構(gòu)也可以看到主從的影子。要解決一個(gè)問題或者故障,很快的方式就是了解它的原理,快速定位問題。本書從源碼層面抽絲剝繭般地描述MySQL主從原理,全面地介紹了GTID相關(guān)的知識(shí)點(diǎn),并解析了主要Event的生成、作用和格式,以及線程的初步知識(shí)、MDL LOCK、排序等熱門話題和主從相關(guān)的案例。無論是MySQL DBA和MySQL源碼愛好者,還是剛進(jìn)入數(shù)據(jù)庫行業(yè)的小白讀者,通過閱讀本書,都能通過源碼級分析,更好地理解和使用MySQL主從復(fù)制技術(shù)。
深入理解MySQL主從原理 目錄
第1章 GTID 1
1.1 GTID的基本概念 1
1.1.1 GTID的作用 1
1.1.2 GTID的基本表示 1
1.1.3 server_uuid的生成 2
1.1.4 GTID的生成 2
1.1.5 GTID_EVENT和PREVIOUS_GTIDS_LOG_EVENT簡介 3
1.1.6 gtid_executed表的作用 4
1.2 mysql.gtid_executed表、gtid_executed變量、gtid_purged變量的修改時(shí)機(jī) 5
1.2.1 定義 5
1.2.2 主庫修改時(shí)機(jī) 7
1.2.3 從庫修改時(shí)機(jī) 8
1.2.4 通用修改時(shí)機(jī) 10
1.2.5 通用修改時(shí)機(jī)源碼函數(shù)簡析 10
1.3 GTID模塊初始化簡介和參數(shù)binlog_gtid_simple_recovery 11
1.3.1 GTID模塊初始化流程圖 12
1.3.2 步驟解析 13
1.4 GTID中的運(yùn)維 16
1.4.1 跳過一個(gè)事務(wù) 17
1.4.2 mysqldump導(dǎo)出行為的改變 17
1.4.3 搭建GTID AUTO_POSITION MODE的主從 18
1.4.4 主從切換 20
1.4.5 參數(shù)gitd_mode的含義 21
1.4.6 在線開啟GTID 21
1.4.7 離線開啟GTID 22
1.4.8 開啟GTID的注意事項(xiàng) 23
1.4.9 統(tǒng)計(jì)值ONGOING_ANONYMOUS_TRANSACTION_COUNT的變更時(shí)機(jī) 23
1.4.10 設(shè)置MASTER_AUTO_POSITION = 1的影響 25
1.4.11 離線開啟GTID丟失數(shù)據(jù)的測試 25
第2章 Event 28
2.1 binary log Event 的總體格式 28
2.1.1 引言 28
2.1.2 binary log綜述 28
2.1.3 Event的總體格式 29
2.1.4 Event header和Event footer 29
2.1.5 具體解析 30
2.1.6 本書涉及的Event類型 31
2.2 重點(diǎn)Event之FORMAT_DESCRIPTION_EVENT和
PREVIOUS_GTIDS_LOG_EVENT 32
2.2.1 FORMAT_DESCRIPTION_EVENT 32
2.2.2 PREVIOUS_GTIDS_LOG_EVENT 35
2.3 重點(diǎn)Event之GTID_EVENT 39
2.3.1 GTID_EVENT的作用 39
2.3.2 源碼重要接口 40
2.3.3 主體格式 40
2.3.4 簡單解析 41
2.3.5 生成時(shí)機(jī) 41
2.3.6 ANONYMOUS_GTID_EVENT 41
2.3.7 GTID的三種模式 42
2.4 重點(diǎn)Event之QUERY_EVENT和MAP_EVENT 43
2.4.1 QUERY_EVENT 43
2.4.2 MAP_EVENT 46
2.5 重點(diǎn)Event之WRITE_EVENT和DELETE_EVENT 51
2.5.1 WRITE_EVENT 51
2.5.2 DELETE_EVENT 57
2.6 重點(diǎn)Event之UPDATE_EVENT和XID_EVENT 61
2.6.1 UPDATE_ROWS_EVENT 61
2.6.2 XID_EVENT 66
2.7 參數(shù)binlog_row_image的影響 68
2.7.1 參數(shù)影響 68
2.7.2 過濾方式 70
2.7.3 DML Event中的標(biāo)識(shí) 70
2.8 巧用Event發(fā)現(xiàn)問題 73
2.8.1 工具簡介 73
2.8.2 分析長期未提交的事務(wù) 74
2.8.3 分析大事務(wù) 75
2.8.4 分析binary log中Event的生成速度 75
2.8.5 分析每個(gè)表生成了多少個(gè)DML Event 75
2.8.6 工具展示 75
第3章 主庫 79
3.1 binlog cache簡介 79
3.1.1 binlog cache綜述 79
3.1.2 使用binlog cache的流程 80
3.1.3 參數(shù)binlog_cache_size的作用及其初始化 80
3.1.4 臨時(shí)文件的分配和使用 81
3.1.5 參數(shù)max_binlog_cache_size的作用 82
3.1.6 如何觀察到臨時(shí)文件 82
3.2 事務(wù)Event的生成和寫入流程 83
3.2.1 流程綜述 83
3.2.2 刪除階段流程 85
3.2.3 提交階段流程 85
3.2.4 兩個(gè)注意點(diǎn) 86
3.3 MySQL層事務(wù)提交流程簡析 86
3.3.1 參數(shù)設(shè)置 86
3.3.2 總體流程圖 87
3.3.3 步驟解析**階段 90
3.3.4 步驟解析第二階段(FLUSH階段) 90
3.3.5 步驟解析第三階段(SYNC階段) 92
3.3.6 步驟解析第四階段(COMMIT階段) 93
3.3.7 步驟解析第五階段 94
3.3.8 提交階段的注意點(diǎn) 95
3.4 基于WRITESET的并行復(fù)制方式 95
3.4.1 奇怪的last commit 96
3.4.2 WRITESET是什么 96
3.4.3 WRITESET的生成 97
3.4.4 add_pke函數(shù)的流程 98
3.4.5 WRITESET設(shè)置對last commit的處理方式 99
3.4.6 WRITESET的歷史MAP 100
3.4.7 WRITESET的并行復(fù)制對last commit的處理流程 100
3.4.8 WRITESET_SESSION的方式 104
3.4.9 關(guān)于參數(shù)binlog_transaction_dependency_history_size的說明 104
3.4.10 沒有主鍵的情況 104
3.4.11 為什么同一個(gè)session執(zhí)行的事務(wù)能生成同樣的last commit 105
3.4.12 WRITESET并行復(fù)制方式的優(yōu)缺點(diǎn) 105
3.5 主庫的DUMP線程 106
3.5.1 POSITION MODE和GTID AUTO_POSITION MODE的不同點(diǎn) 106
3.5.2 流程圖 108
3.5.3 步驟解析 109
3.5.4 重點(diǎn)說明 112
3.6 DUMP線程查找和過濾GTID的基本算法 113
3.6.1 環(huán)境假設(shè) 113
3.6.2 檢查從庫的GTID是否大于主庫的GTID 114
3.6.3 檢查需要的binary log是否已經(jīng)清理 114
3.6.4 實(shí)際掃描binary log 115
3.6.5 GTID過濾 115
第4章 從庫 117
4.1 從庫MTS多線程并行回放(一) 117
4.1.1 MTS綜述 117
4.1.2 協(xié)調(diào)線程的分發(fā)機(jī)制 118
4.1.3 步驟解析 120
4.1.4 并行回放判定一例 124
4.2 從庫MTS多線程并行回放(二) 126
4.2.1 工作線程執(zhí)行Event 126
4.2.2 MTS檢查點(diǎn)中的重要概念 127
4.2.3 MTS中執(zhí)行檢查點(diǎn)的流程 132
4.2.4 MTS的關(guān)鍵點(diǎn) 136
4.3 MTS中的“gap”測試和參數(shù)lave_preserve_commit_ order 136
4.3.1 MTS中的“gap”測試 136
4.3.2 參數(shù)slave_preserve_commit_order的影響 138
4.4 從庫的I/O線程 139
4.4.1 引入 139
4.4.2 I/O線程的啟動(dòng)流程圖 140
4.4.3 流程解析 142
4.5 從庫的SQL線程(MTS協(xié)調(diào)線程)和參數(shù)sql_slave_skip_counter 146
4.5.1 SQL線程的功能 146
4.5.2 流程圖 146
4.5.3 重要步驟說明 148
4.5.4 各個(gè)Event做了什么 151
4.6 從庫數(shù)據(jù)的查找和參數(shù)slave_rows_search_algorithms 153
4.6.1 從一個(gè)例子出發(fā) 153
4.6.2 確認(rèn)查找數(shù)據(jù)的方式 156
4.6.3 ROW_LOOKUP_HASH_SCAN方式的數(shù)據(jù)查找 159
4.6.4 從庫數(shù)據(jù)查找的要點(diǎn) 161
4.7 從庫的關(guān)閉和異常恢復(fù)流程 162
4.7.1 正常的stop slave流程 162
4.7.2 stop slave為什么會(huì)慢 163
4.7.3 從庫啟動(dòng)需要讀取的信息 164
4.7.4 關(guān)于repository表的事務(wù)性 165
4.7.5 相關(guān)參數(shù) 166
4.7.6 恢復(fù)流程 167
4.8 安全高效的從庫設(shè)置 170
4.8.1 從庫參數(shù)設(shè)置建議 170
4.8.2 單SQL線程模式 171
4.8.3 MTS 174
4.8.4 一個(gè)非安全設(shè)置的例子 176
4.8.5 參數(shù)sync_relay_log的影響 177
4.9 從庫Seconds_Behind_Master的計(jì)算方式 177
4.9.1 Seconds_Behind_Master的計(jì)算方式 178
4.9.2 影響Seconds_Behind_Master的因素 178
4.9.3 不同操作計(jì)算延遲的方式 181
4.9.4 MTS中Seconds_Behind_Master計(jì)算誤差測試 181
4.9.5 手動(dòng)修改系統(tǒng)時(shí)間導(dǎo)致Seconds_Behind_Master為0 183
4.10 Seconds_Behind_Master延遲場景歸納 185
4.10.1 延遲場景 185
4.10.2 相關(guān)測試 186
4.10.3 延遲診斷的方法論 189
第5章 案例解析 190
5.1 線程簡介和MySQL調(diào)試環(huán)境搭建 190
5.1.1 線程簡介 190
5.1.2 PID、LWP ID、Thread TID 192
5.1.3 MySQL線程和系統(tǒng)LWP ID的關(guān)系 193
5.1.4 調(diào)試環(huán)境的搭建 194
5.1.5 調(diào)試環(huán)境的使用 197
5.2 MySQL排序詳細(xì)解析 198
5.2.1 為什么要討論排序 198
5.2.2 從一個(gè)問題出發(fā) 199
5.2.3 測試案例 200
5.2.4 階段1:確認(rèn)排序字段及順序 202
5.2.5 階段2:計(jì)算sort字段長度 202
5.2.6 階段3:計(jì)算額外字段的空間 203
5.2.7 階段4:確認(rèn)每行的長度 205
5.2.8 階段5:確認(rèn)*大內(nèi)存分配 206
5.2.9 階段6:讀取數(shù)據(jù)進(jìn)行內(nèi)存排序 207
5.2.10 階段7:排序方式總結(jié)輸出 210
5.2.11 階段8:進(jìn)行*終排序 211
5.2.12 排序的其他問題 212
5.2.13 使用OPTIMIZER_TRACE查看排序信息 214
5.2.14 回到問題本身 215
5.2.15 答疑 217
5.3 MySQL中的MDL Lock簡介 219
5.3.1 MDL Lock綜述 219
5.3.2 重要數(shù)據(jù)結(jié)構(gòu)和概念 220
5.3.3 為MDL Lock增加打印函數(shù) 225
5.3.4 在合適的位置增加打印函數(shù) 227
5.3.5 常見MDL Lock類型的加鎖測試 229
5.4 奇怪的FTWRL堵塞案例 237
5.4.1 兩個(gè)不同的現(xiàn)象 237
5.4.2 sleep 函數(shù)生效點(diǎn) 239
5.4.3 FTWRL做了什么工作 240
5.4.4 例5-3步驟解析 242
5.4.5 例5-4步驟解析 243
5.4.6 FTWRL堵塞和被堵塞的簡單總結(jié) 244
5.5 產(chǎn)生大量小relay log故障案例 245
5.5.1 案例現(xiàn)象 245
5.5.2 參數(shù)slave_net_timeout分析 245
5.5.3 原因剖析 246
5.5.4 案例模擬 246
5.5.5 實(shí)現(xiàn)方式 248
5.6 從庫system lock原因簡析 250
5.6.1 binary log的寫入時(shí)間和Event中的時(shí)間 250
5.6.2 問題由來 251
5.6.3 從庫system lock延遲的原因 251
5.6.4 system lock問題分析 252
5.6.5 模擬測試 253
深入理解MySQL主從原理 作者簡介
高鵬(網(wǎng)名八怪),現(xiàn)任中亦安圖科技有限公司數(shù)據(jù)庫專家,2008年開始從事Oracle/MySQL相關(guān)工作,Oracle OCM、MySQL源碼愛好者,知數(shù)堂8期學(xué)員。有豐富的數(shù)據(jù)庫性能調(diào)優(yōu)、故障診斷經(jīng)驗(yàn)。
- >
自卑與超越
- >
我與地壇
- >
伯納黛特,你要去哪(2021新版)
- >
二體千字文
- >
上帝之肋:男人的真實(shí)旅程
- >
月亮與六便士
- >
月亮虎
- >
莉莉和章魚