第1章 MariaDB概述 1
1.1 MariaDB的曆史 1
1.2 MariaDB所做的事情 2
1.2.1 更豐富的存儲引擎 2
1.2.2 性能的提升 2
1.2.3 擴展和新特性 3
1.2.4 更好的測試 3
1.2.5 盡量消除錯誤和警告 4
1.3 MariaDB的版本與兼容性 4
1.3.1 MariaDB 5.1和MySQL 5.1的不兼容性 4
1.3.2 MariaDB 5.2和MySQL 5.1的不兼容性 5
1.3.3 MariaDB 5.3和MySQL 5.1、MariaDB 5.2的不兼容性 5
1.3.4 MariaDB 5.5和MariaDB 5.3的不兼容性 6
1.3.5 MariaDB 5.5與MariaDB 5.3和MySQL 5.5 的不兼容性 7
1.3.6 MariaDB 10.0和MySQL 5.6的不兼容性 7
1.4 編譯和安裝MariaDB 8
1.4.1 使用二進製安裝包進行安裝 8
1.4.2 使用源代碼進行編譯安裝 9
1.5 聯係社區 11
1.6 小結 12
第2章 MariaDB的擴展和新特性 13
2.1 更多的存儲引擎 13
2.1.1 全新的Aria存儲引擎 13
2.1.2 XtraDB存儲引擎 16
2.1.3 SphinxSE存儲引擎 17
2.1.4 FederatedX存儲引擎 17
2.1.5 TokuDB存儲引擎 18
2.1.6 Cassandra存儲引擎 18
2.1.7 CONNECT存儲引擎 18
2.1.8 Sequence存儲引擎 19
2.1.9 Spider存儲引擎 20
2.2 綫程池技術和binlog group commit技術 22
2.2.1 綫程池技術 22
2.2.2 binlog group commit技術 23
2.3 MariaDB其他擴展和新特性 23
2.3.1 更高的時間精度 23
2.3.2 虛擬列 24
2.3.3 用戶統計功能 25
2.3.4 KILL命令的擴展 27
2.3.5 命令執行進度報告 27
2.3.6 動態列 28
2.3.7 多源復製 29
2.4 小結 29
第3章 初識MariaDB源代碼 31
3.1 MariaDB源代碼的目錄組織結構 31
3.2 MariaDB對類型和函數的封裝 33
3.2.1 對類型的封裝 33
3.2.2 對函數的封裝 33
3.3 調試MariaDB 34
3.3.1 準備工作 34
3.3.2 mysqld關鍵的函數調用 37
3.3.3 調試 38
3.4 小結 40
第4章 MariaDB基礎數據結構 41
4.1 內存池MEM_ROOT 41
4.1.1 內存碎片問題 42
4.1.2 MEM_ROOT的定義 44
4.1.3 MEM_ROOT的使用 46
4.1.4 MEM_ROOT的初始化 47
4.1.5 分配內存 48
4.1.6 內存迴收 50
4.1.7 MEM_ROOT的使用場景 52
4.2 文件緩存IO_CACHE 52
4.2.1 高性能武器——緩存 53
4.2.2 IO_CACHE的定義 54
4.2.3 IO_CACHE的使用 57
4.3 NET結構 63
4.4 綫程上下文——THD 65
4.5 TABLE_SHARE 69
4.6 TABLE 73
4.7 小結 76
第5章 MariaDB綫程池 77
5.1 綫程池相關的參數 77
5.1.1 MariaDB 5.1和MariaDB 5.3中的綫程池 77
5.1.2 MariaDB 5.5和MariaDB 10.0中的綫程池 78
5.2 何時使用綫程池 79
5.3 綫程池的實現 79
5.3.1 綫程池相關的數據結構 80
5.3.2 綫程池的初始化 82
5.3.3 添加連接到綫程池 84
5.3.4 worker綫程 85
5.3.5 get_event函數 86
5.3.6 listener綫程 89
5.3.7 timer綫程 92
5.4 小結 94
第6章 二進製日誌binlog 95
6.1 簡介 95
6.1.1 binlog的作用 96
6.1.2 index文件 96
6.2 binlog的使用 97
6.2.1 開啓binlog 97
6.2.2 選擇binlog的格式 97
6.2.3 binlog的相關參數 98
6.3 binlog事件 99
6.3.1 binlog事件格式 99
6.3.2 binlog事件類型 101
6.3.3 binlog事件的實現 108
6.4 清理binlog 109
6.4.1 手動清理binlog 109
6.4.2 自動清理binlog 109
6.4.3 purge命令的實現 109
6.5 binlog_cache_mngr結構 112
6.6 mysqlbinlog工具 112
6.7 使用binlog進行恢復 113
6.8 小結 113
第7章 binlog group commit技術 115
7.1 事務的兩階段提交 115
7.2 binlog group commit的工作原理 117
7.3 binlog group commit的實現 118
7.3.1 相關的數據結構 118
7.3.2 代碼執行流程 120
7.3.3 事務排隊 125
7.3.4 leader綫程的工作 128
7.3.5 prepare_ordered和commit_ordered接口 134
7.4 小結 135
第8章 復製 136
8.1 簡介 136
8.2 復製的作用 137
8.3 復製的工作原理 138
8.3.1 概要 138
8.3.2 relay-log 140
8.3.3 master.info文件和relay-log.info文件 140
8.4 復製的配置 141
8.4.1 在新安裝的主庫和從庫上配置復製 141
8.4.2 主庫有一定數據時的復製配置 144
8.4.3 選擇性復製 150
8.5 復製的實現 151
8.5.1 復製相關的數據結構 152
8.5.2 復製的初始化——init_slave函數 157
8.5.3 CHANGE MASTER TO命令——準備工作 159
8.5.4 START SLAVE命令——開啓復製 160
8.5.5 STOP SLAVE命令——停止復製 160
8.5.6 slave IO綫程 161
8.5.7 slave SQL綫程 164
8.5.8 master dump綫程 165
8.6 半同步復製 168
8.6.1 半同步復製的工作原理 168
8.6.2 半同步的安裝和配置 169
8.6.3 半同步復製的實現 171
8.6.4 半同步復製的變種 179
8.6.5 半同步復製的潛在問題 180
8.7 並行復製 181
8.7.1 MySQL的並行復製 181
8.7.2 MariaDB的並行復製 181
8.8 多源復製 182
8.8.1 多源復製的應用場景 182
8.8.2 多源復製相關的命令 183
8.8.3 MariaDB多源復製的實現 184
8.9 GTID 185
8.9.1 GTID的概念 186
8.9.2 在MySQL上配置基於GTID的復製 186
8.9.3 MySQL中GTID的實現 187
8.9.4 MariaDB中的GTID 195
8.10 小結 195
第9章 數據結構和算法 197
9.1 算法復雜度 197
9.2 B+樹和索引 198
9.2.1 磁盤的讀取 198
9.2.2 B+樹 199
9.2.3 數據庫索引 200
9.3 堆排序與快速排序 201
9.3.1 堆——優先級隊列 201
9.3.2 堆排序 202
9.3.3 快速排序——qsort 203
9.4 ORDER BY的實現 204
9.4.1 使用索引的已有順序 205
9.4.2 filesort算法 207
9.5 JOIN的實現 210
9.5.1 JOIN語句的使用 211
9.5.2 Nest Loop Join算法 212
9.5.3 Block Nest Loop Join算法 214
9.5.4 Batched Key Access Join算法 216
9.5.5 Hash Join算法 216
9.5.6 Sort Merge Join算法 217
9.6 小結 218
第10章 分布式數據庫 219
10.1 分布式數據庫概要 219
10.1.1 分布式數據庫的特點 219
10.1.2 係統的擴展方式 220
10.1.3 分布式數據庫中的技術難點 221
10.2 數據的分片方式 221
10.3 分布式數據庫實踐——京東分布式數據庫係統 222
10.3.1 京東分布式數據庫係統架構 222
10.3.2 高可用組的初始化 223
10.3.3 數據的分片 224
10.3.4 係統的高可用性 225
10.3.5 係統的可擴展性 227
10.4 小結 230
附錄A 數據庫與IO資源控製 231
· · · · · · (
收起)