第1章 異步復制 / 1
1.1 MySQL異步復制簡介 / 1
1.1.1 復制的用途 / 1
1.1.2 復制如何工作 / 2
1.1.3 兩階段提交 / 6
1.2 搭建實驗環境 / 8
1.2.1 實驗環境說明 / 8
1.2.2 安裝MySQL / 8
1.3 配置異步復制 / 12
1.3.1 空庫 / 12
1.3.2 脫機 / 16
1.3.3 聯機 / 17
1.4 小結 / 20
第2章 半同步復制 / 21
2.1 MySQL半同步復制簡介 / 21
2.2 性能提升 / 22
2.2.1 ACK異步化 / 22
2.2.2 控制從庫反饋的數量 / 24
2.2.3 二進制日志互斥鎖的改進 / 25
2.3 數據一致性 / 26
2.3.1 rpl_semi_sync_master_wait_point配置 / 26
2.3.2 sync_binlog配置 / 28
2.3.3 sync_relay_log配置 / 30
2.4 管理接口 / 32
2.5 配置半同步復制 / 32
2.5.1 安裝插件 / 32
2.5.2 啟用半同步復制 / 34
2.5.3 監控半同步復制 / 35
2.6 測試 / 37
2.6.1 正常提交事務 / 37
2.6.2 回滾事務 / 38
2.6.3 rpl_semi_sync_master_wait_no_slave與從庫數量 / 40
2.7 小結 / 44
第3章 GTID與復制 / 45
3.1 GTID簡介 / 45
3.1.1 什麼是GTID / 45
3.1.2 GTID的格式與存儲 / 46
3.2 GTID生命周期 / 54
3.2.1 典型事務的GTID生命周期 / 54
3.2.2 GTID分配 / 57
3.2.3 gtid_next繫統變量 / 58
3.2.4 gtid_purged繫統變量 / 60
3.3 GTID自動定位 / 68
3.4 配置GTID復制 / 70
3.4.1 聯機配置GTID復制 / 70
3.4.2 聯機更改復制模式 / 74
3.4.3 GTID相關繫統變量 / 75
3.5 GTID運維 / 76
3.5.1 跳過一個事務 / 76
3.5.2 mysqldump導出 / 77
3.5.3 主從切換 / 78
3.6 GTID限制 / 81
3.7 GTID集合運算函數 / 84
3.7.1 GTID內置函數 / 84
3.7.2 用戶自定義函數 / 84
3.7.3 使用示例 / 85
3.8 小結 / 88
第4章 復制拓撲結構與性能 / 89
4.1 復制拓撲結構 / 89
4.1.1 一主一(多)從 / 89
4.1.2 雙(多)主復制 / 91
4.1.3 多源復制 / 99
4.1.4 Blackhole引擎與日志服務器 / 104
4.2 復制性能 / 108
4.2.1 測試規劃 / 108
4.2.2 sync_binlog與innodb_flush_log_at_trx_commit / 111
4.2.3 組提交與多線程復制 / 111
4.2.4 基於WriteSet的多線程復制 / 117
4.3 小結 / 120
第5章 延遲復制與部分復制 / 121
5.1 延遲復制 / 121
5.1.1 延遲復制簡介 / 121
5.1.2 延遲復制時間戳 / 124
5.1.3 監控延遲復制 / 125
5.2 部分復制 / 125
5.2.1 部分復制簡介 / 126
5.2.2 評估庫級復制選項 / 126
5.2.3 評估表級復制選項 / 129
5.2.4 復制規則應用 / 134
5.2.5 部分復制示例 / 136
5.3 主從切換 / 139
5.3.1 計劃內主從切換 / 139
5.3.2 計劃外切換 / 140
5.4 小結 / 148
第6章 組復制 / 149
6.1 組復制基本原理 / 149
6.1.1 MySQL復制技術 / 149
6.1.2 組復制使用場景 / 151
6.1.3 組復制相關服務 / 151
6.1.4 組復制插件體繫結構 / 152
6.1.5 組復制分布式恢復 / 153
6.2 組復制安裝部署 / 156
6.2.1 部署單主模式組復制 / 157
6.2.2 組復制監控 / 165
6.2.3 容錯示例 / 165
6.3 組復制性能 / 172
6.3.1 概述 / 172
6.3.2 測試規劃 / 174
6.3.3 消息壓縮 / 177
6.3.4 組通信線程循環 / 178
6.3.5 寫入集 / 178
6.3.6 流控 / 179
6.3.7 其他配置 / 181
6.3.8 主從、半同步、組復制性能對比測試 / 183
6.4 組復制要求與限制 / 185
6.4.1 組復制要求 / 185
6.4.2 組復制限制 / 187
6.5 小結 / 188
第7章 MySQL Router / 189
7.1 MySQL Router簡介 / 189
7.1.1 透明路由 / 189
7.1.2&nbs數據緩存 / 190
7.1.3 簡單重定向 / 190
7.1.4 部署與使用 / 191
7.1.5 MySQL Router 8.0的新特性 / 192
7.2 Router實現MySQL高可用示例 / 192
7.2.1 安裝和配置 / 192
7.2.2 自動故障轉移 / 199
7.2.3 負載均衡 / 202
7.2.4 讀寫分離 / 202
7.2.5 多實例 / 202
7.3 Router 8安裝和配置 / 205
7.3.1 安裝 / 205
7.3.2 啟動 / 206
7.3.3 配置 / 210
7.4 小結 / 214
第8章 MySQL Fabric / 215
8.1 MySQL Fabric簡介 / 215
8.1.1 MySQL Fabric的用途 / 215
8.1.2 MySQL Fabric架構 / 216
8.2 高可用性 / 218
8.2.1 概述 / 218
8.2.2 安裝與配置 / 218
8.2.3 HA功能測試 / 226
8.3 數據分片 / 232
8.4 MySQL Fabric限制 / 233
8.5 小結 / 234
第9章 MMM / 235
9.1 MMM簡介 / 235
9.1.1 基本功能 / 235
9.1.2 工作原理 / 236
9.1.3 典型用例 / 237
9.1.4 切換流程 / 238
9.1.5 繫統需求 / 238
9.2 實現MySQL主主復制的高可用 / 240
9.2.1 基本環境 / 240
9.2.2 安裝和配置 / 241
9.2.3 功能測試 / 244
9.3 小結 / 248
第10章 MHA / 249
10.1 MHA簡介 / 249
10.1.1 基本功能 / 249
10.1.2 切換流程 / 250
10.1.3 部署架構 / 250
10.1.4 主要特點 / 251
10.1.5 工具介紹 / 252
10.2 安裝和配置 / 252
10.2.1 配置主從復制 / 253
10.2.2 安裝Perl依賴模塊 / 253
10.2.3 配置SSH免密登錄 / 254
10.2.4 安裝MHA Node / 254
10.2.5 安裝MHA Manager / 255
10.2.6 配置MHA / 255
10.2.7 創建相關腳本 / 257
10.2.8 檢查MHA配置 / 265
10.3 功能測試 / 267
10.3.1 初始綁定VIP / 267
10.3.2 測試自動切換 / 267
10.3.3 測試手工切換 / 271
10.3.4 測試在線主從切換 / 273
10.3.5 修復宕機的主庫 / 276
10.4 小結 / 276
第11章 Keepalived LVS / 277
11.1 Keepalived簡介 / 277
11.1.1 VRRP協議 / 277
11.1.2 Keepalived架構設計 / 278
11.2 LVS簡介 / 280
11.3 實現MySQL主從復制中的讀寫分離及高可用 / 281
11.3.1 架構設計 / 282
11.3.2 安裝和配置 / 283
11.3.3 功能測試 / 292
11.4 實現MySQL雙主復制的讀寫負載均衡及高可用 / 295
11.4.1 架構設計 / 295
11.4.2 安裝和配置 / 296
11.4.3 功能測試 / 301
11.5 小結 / 304
第12章 Heartbeat HAProxy / 305
12.1 Heartbeat簡介 / 305
12.1.1 Heartbeat組成模塊 / 305
12.1.2 Heartbeat工作原理 / 307
12.2 HAProxy簡介 / 308
12.3 實現MySQL主從復制的讀寫分離及高可用 / 309
12.3.1 架構設計 / 310
12.3.2 安裝和配置 / 310
12.3.3 功能測試 / 320
12.4 實現MySQL雙主復制的讀寫負載均衡及高可用 / 323
12.4.1 架構設計 / 323
12.4.2 安裝和配置 / 324
12.4.3 功能測試 / 326
12.5 小結 / 329
第13章 InnoDB Cluster / 330
13.1 InnoDB Cluster簡介 / 330
13.1.1 整體架構 / 330
13.1.2 MySQL Shell / 331
13.1.3 MySQL Router / 333
13.1.4 MySQL服務器集群 / 333
13.2 創建InnoDB Cluster / 334
13.2.1 檢查實例配置 / 335
13.2.2 配置實例 / 337
13.2.3 創建集群 / 339
13.2.4 向集群添加實例 / 339
13.2.5 查看集群狀態 / 341
13.2.6 基於已有組復制創建集群 / 343
13.2.7 配置MySQL Router / 343
13.2.8 測試客戶端連接 / 346
13.2.9 測試高可用性 / 347
13.3 使用MySQL Shell管理InnoDB Cluster / 349
13.3.1 配置實例自動重新加入 / 349
13.3.2 從InnoDB Cluster中刪除實例 / 350
13.3.3 重啟集群 / 351
13.3.4 解散InnoDB Cluster / 352
13.3.5 配置新主選舉權重 / 354
13.3.6 配置故障轉移一致性 / 354
13.3.7 更改組復制拓撲 / 355
13.3.8 設置InnoDB Cluster選項 / 356
13.4 小結 / 357
第14章 Galera Cluster / 358
14.1 基本原理 / 358
14.1.1 同步復制 / 359
14.1.2 Galera復制架構 / 361
14.1.3 Galera工作原理 / 362
14.1.4 狀態轉移 / 363
14.1.5 流控 / 365
14.1.6 單節點故障與恢復 / 367
14.1.7 仲裁 / 367
14.2 安裝和配置 / 371
14.2.1 初始安裝 / 371
14.2.2 使用SST增加節點 / 375
14.2.3 使用IST增加節點 / 376
14.3 管理監控 / 380
14.3.1 在線DDL / 380
14.3.2 恢復主組件 / 382
14.3.3 重置仲裁 / 385
14.3.4 管理流控 / 386
14.3.5 自動逐出 / 388
14.3.6 啟用Galera仲裁員 / 389
14.3.7 Galera集群監控 / 391
14.4 性能測試 / 394
14.4.1 測試規劃 / 394
14.4.2 測試過程 / 397
14.5 負載均衡 / 399
14.5.1 安裝 / 399
14.5.2 配置 / 400
14.5.3 啟動 / 400
14.5.4 測試 / 401
14.6 小結 / 402
第15章 DRBD / 403
15.1 DRBD簡介 / 403
15.1.1 工作原理 / 403
15.1.2 基本概念 / 404
15.2 DRBD安裝和配置 / 405
15.2.1 測試環境 / 405
15.2.2 安裝前的準備工作 / 406
15.2.3 下載安裝DRBD / 407
15.2.4 配置DRBD / 407
15.3 測試MySQL數據同步 / 411
15.4 Heartbeat DRBD MySQL高可用方案 / 412
15.4.1 配置 / 413
15.4.2 測試 / 417
15.5 小結 / 419
第16章 優化案例 / 420
16.1 快速生成數字輔助表 / 420
16.2 將MySQL去重操作優化到極致 / 422
16.2.1 問題描述 / 422
16.2.2 巧用索引與變量 / 423
16.2.3 利用窗口函數 / 431
16.2.4 多線程並行 / 432
16.3 重疊時間段問題之算法優化 / 441
16.3.1 問題描述與分析 / 441
16.3.2 優化重疊查詢 / 443
16.3.3 改進取得活躍時段的算法 / 449
16.3.4 MySQL 8的單條查詢解決方案 / 456
16.4 快速安全刪除MySQL大表 / 458
16.4.1 表刪除過程 / 458
16.4.2 創建硬鏈接 / 459
16.4.3 刪除表 / 460
16.4.4 刪除文件釋放空間 / 460
16.5 小結 / 461