深入理解MySQL主從原理

深入理解MySQL主從原理

《深入理解MySQL主從原理》是電子工業出版社出版圖書,作者是高鵬。本書徹底地分析了MySQL主從原理

基本介紹

  • 中文名:深入理解MySQL主從原理
  • 作者:高鵬
  • 出版社:電子工業出版社
  • 出版時間:2021年4月
  • 頁數:268 頁
  • 定價:79 元
  • 開本:16 開
  • ISBN:9787121406584
內容簡介,圖書目錄,作者簡介,

內容簡介

《深入理解MySQL主從原理》從源碼層面抽絲剝繭般地描述MySQL主從原理,全面地介紹了GTID相關的知識點

圖書目錄

第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變數的修改時機 5
1.2.1 定義 5
1.2.2 主庫修改時機 7
1.2.3 從庫修改時機 8
1.2.4 通用修改時機 10
1.2.5 通用修改時機源碼函式簡析 10
1.3 GTID模組初始化簡介和參數binlog_gtid_simple_recovery 11
1.3.1 GTID模組初始化流程圖 12
1.3.2 步驟解析 13
1.4 GTID中的運維 16
1.4.1 跳過一個事務 17
1.4.2 mysqldump導出行為的改變 17
1.4.3 搭建GTID AUTO_POSITION MODE的主從 18
1.4.4 主從切換 20
1.4.5 參數gitd_mode的含義 21
1.4.6 線上開啟GTID 21
1.4.7 離線開啟GTID 22
1.4.8 開啟GTID的注意事項 23
1.4.9 統計值ONGOING_ANONYMOUS_TRANSACTION_COUNT的變更時機 23
1.4.10 設定MASTER_AUTO_POSITION = 1的影響 25
1.4.11 離線開啟GTID丟失數據的測試 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 重點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 重點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 生成時機 41
2.3.6 ANONYMOUS_GTID_EVENT 41
2.3.7 GTID的三種模式 42
2.4 重點Event之QUERY_EVENT和MAP_EVENT 43
2.4.1 QUERY_EVENT 43
2.4.2 MAP_EVENT 46
2.5 重點Event之WRITE_EVENT和DELETE_EVENT 51
2.5.1 WRITE_EVENT 51
2.5.2 DELETE_EVENT 57
2.6 重點Event之UPDATE_EVENT和XID_EVENT 61
2.6.1 UPDATE_ROWS_EVENT 61
2.6.2 XID_EVENT 66
2.7 參數binlog_row_image的影響 68
2.7.1 參數影響 68
2.7.2 過濾方式 70
2.7.3 DML Event中的標識 70
2.8 巧用Event發現問題 73
2.8.1 工具簡介 73
2.8.2 分析長期未提交的事務 74
2.8.3 分析大事務 75
2.8.4 分析binary log中Event的生成速度 75
2.8.5 分析每個表生成了多少個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 參數binlog_cache_size的作用及其初始化 80
3.1.4 臨時檔案的分配和使用 81
3.1.5 參數max_binlog_cache_size的作用 82
3.1.6 如何觀察到臨時檔案 82
3.2 事務Event的生成和寫入流程 83
3.2.1 流程綜述 83
3.2.2 刪除階段流程 85
3.2.3 提交階段流程 85
3.2.4 兩個注意點 86
3.3 MySQL層事務提交流程簡析 86
3.3.1 參數設定 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 提交階段的注意點 95
3.4 基於WRITESET的並行複製方式 95
3.4.1 奇怪的last commit 96
3.4.2 WRITESET是什麼 96
3.4.3 WRITESET的生成 97
3.4.4 add_pke函式的流程 98
3.4.5 WRITESET設定對last commit的處理方式 99
3.4.6 WRITESET的歷史MAP 100
3.4.7 WRITESET的並行複製對last commit的處理流程 100
3.4.8 WRITESET_SESSION的方式 104
3.4.9 關於參數binlog_transaction_dependency_history_size的說明 104
3.4.10 沒有主鍵的情況 104
3.4.11 為什麼同一個session執行的事務能生成同樣的last commit 105
3.4.12 WRITESET並行複製方式的優缺點 105
3.5 主庫的DUMP執行緒 106
3.5.1 POSITION MODE和GTID AUTO_POSITION MODE的不同點 106
3.5.2 流程圖 108
3.5.3 步驟解析 109
3.5.4 重點說明 112
3.6 DUMP執行緒查找和過濾GTID的基本算法 113
3.6.1 環境假設 113
3.6.2 檢查從庫的GTID是否大於主庫的GTID 114
3.6.3 檢查需要的binary log是否已經清理 114
3.6.4 實際掃描binary log 115
3.6.5 GTID過濾 115
第4章 從庫 117
4.1 從庫MTS多執行緒並行回放(一) 117
4.1.1 MTS綜述 117
4.1.2 協調執行緒的分發機制 118
4.1.3 步驟解析 120
4.1.4 並行回放判定一例 124
4.2 從庫MTS多執行緒並行回放(二) 126
4.2.1 工作執行緒執行Event 126
4.2.2 MTS檢查點中的重要概念 127
4.2.3 MTS中執行檢查點的流程 132
4.2.4 MTS的關鍵點 136
4.3 MTS中的“gap”測試和參數lave_preserve_commit_ order 136
4.3.1 MTS中的“gap”測試 136
4.3.2 參數slave_preserve_commit_order的影響 138
4.4 從庫的I/O執行緒 139
4.4.1 引入 139
4.4.2 I/O執行緒的啟動流程圖 140
4.4.3 流程解析 142
4.5 從庫的SQL執行緒(MTS協調執行緒)和參數sql_slave_skip_counter 146
4.5.1 SQL執行緒的功能 146
4.5.2 流程圖 146
4.5.3 重要步驟說明 148
4.5.4 各個Event做了什麼 151
4.6 從庫數據的查找和參數slave_rows_search_algorithms 153
4.6.1 從一個例子出發 153
4.6.2 確認查找數據的方式 156
4.6.3 ROW_LOOKUP_HASH_SCAN方式的數據查找 159
4.6.4 從庫數據查找的要點 161
4.7 從庫的關閉和異常恢複流程 162
4.7.1 正常的stop slave流程 162
4.7.2 stop slave為什麼會慢 163
4.7.3 從庫啟動需要讀取的信息 164
4.7.4 關於repository表的事務性 165
4.7.5 相關參數 166
4.7.6 恢複流程 167
4.8 安全高效的從庫設定 170
4.8.1 從庫參數設定建議 170
4.8.2 單SQL執行緒模式 171
4.8.3 MTS 174
4.8.4 一個非安全設定的例子 176
4.8.5 參數sync_relay_log的影響 177
4.9 從庫Seconds_Behind_Master的計算方式 177
4.9.1 Seconds_Behind_Master的計算方式 178
4.9.2 影響Seconds_Behind_Master的因素 178
4.9.3 不同操作計算延遲的方式 181
4.9.4 MTS中Seconds_Behind_Master計算誤差測試 181
4.9.5 手動修改系統時間導致Seconds_Behind_Master為0 183
4.10 Seconds_Behind_Master延遲場景歸納 185
4.10.1 延遲場景 185
4.10.2 相關測試 186
4.10.3 延遲診斷的方法論 189
第5章 案例解析 190
5.1 執行緒簡介和MySQL調試環境搭建 190
5.1.1 執行緒簡介 190
5.1.2 PID、LWP ID、Thread TID 192
5.1.3 MySQL執行緒和系統LWP ID的關係 193
5.1.4 調試環境的搭建 194
5.1.5 調試環境的使用 197
5.2 MySQL排序詳細解析 198
5.2.1 為什麼要討論排序 198
5.2.2 從一個問題出發 199
5.2.3 測試案例 200
5.2.4 階段1:確認排序欄位及順序 202
5.2.5 階段2:計算sort欄位長度 202
5.2.6 階段3:計算額外欄位的空間 203
5.2.7 階段4:確認每行的長度 205
5.2.8 階段5:確認最大記憶體分配 206
5.2.9 階段6:讀取數據進行記憶體排序 207
5.2.10 階段7:排序方式總結輸出 210
5.2.11 階段8:進行最終排序 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 重要數據結構和概念 220
5.3.3 為MDL Lock增加列印函式 225
5.3.4 在合適的位置增加列印函式 227
5.3.5 常見MDL Lock類型的加鎖測試 229
5.4 奇怪的FTWRL堵塞案例 237
5.4.1 兩個不同的現象 237
5.4.2 sleep 函式生效點 239
5.4.3 FTWRL做了什麼工作 240
5.4.4 例5-3步驟解析 242
5.4.5 例5-4步驟解析 243
5.4.6 FTWRL堵塞和被堵塞的簡單總結 244
5.5 產生大量小relay log故障案例 245
5.5.1 案例現象 245
5.5.2 參數slave_net_timeout分析 245
5.5.3 原因剖析 246
5.5.4 案例模擬 246
5.5.5 實現方式 248
5.6 從庫system lock原因簡析 250
5.6.1 binary log的寫入時間和Event中的時間 250
5.6.2 問題由來 251
5.6.3 從庫system lock延遲的原因 251
5.6.4 system lock問題分析 252
5.6.5 模擬測試 253

作者簡介

高鵬(網名八怪),現任中亦安圖科技有限公司資料庫專家,2008年開始從事Oracle/MySQL相關工作,Oracle OCM,MySQL源碼愛好者,有豐富的資料庫性能調優,故障診斷經驗。

相關詞條

熱門詞條

聯絡我們