MySQL數(shù)據(jù)庫是現(xiàn)代軟件系統(tǒng)基礎應用的核心組成部分,如何保持MySQL的高可用性在系統(tǒng)應用中就變得極為重要。本書從復制、中間件、集群、存儲、優(yōu)化五個方面介紹MySQL高可用技術。
本書分為16章,內(nèi)容包括異步復制、半同步復制、GTID與復制、復制拓撲與性能、延遲復制與部分復制、組復制、MySQL Router、MySQL Fabric、MMM、MHA、Keepalived + LVS、Heartbeat + HAProxy、InnoDB Cluster、Galera Cluster、DRBD、優(yōu)化案例等。
本書適合DBA、系統(tǒng)管理運維、應用程序開發(fā)、架構師等MySQL相關技術人員作為參考書,也適合作為高等院校和培訓學校相關專業(yè)的技術培訓教材。
"網(wǎng)上關于MySQL的資料比比皆是,但大部分都是針對單一具體問題的解答,例如如何配置MySQL雙主復制等,全面系統(tǒng)講述MySQL高可用這方面的資料并不多見。而且,這些資料大多只給出簡單的實現(xiàn)方法,缺少相應的理論背景知識和分析驗證過程。這是我寫這本書的第二個原因,希望能填補缺口,讓讀者不但知其然,也知其所以然。 從2000年至今的20年里,我一直從事各種數(shù)據(jù)庫相關的應用開發(fā)和管理工作,尤其是近年來一直跟MySQL數(shù)據(jù)庫打交道。從簡單的單實例,到各種復制,再到集群以及與中間件的配合,在其使用上積累等
王雪迎 ,畢業(yè)于中國地質(zhì)大學計算機專業(yè),不錯工程師,20年數(shù)據(jù)庫、數(shù)據(jù)倉庫相關技術工作經(jīng)驗。先后供職于北京現(xiàn)代商業(yè)信息技術有限公司、北京在線九州信息技術服務有限公司、華北計算技術研究所、北京優(yōu)貝在線網(wǎng)絡科技有限公司,擔任DBA、數(shù)據(jù)架構師等職位。著有圖書《Hadoop構建數(shù)據(jù)倉庫實踐》《HAWQ數(shù)據(jù)倉庫與數(shù)據(jù)挖掘?qū)崙?zhàn)》《SQL機器學習庫MADlib技術解析》。
第1章異步復制1
1.1MySQL異步復制簡介1
1.1.1復制的用途1
1.1.2復制如何工作2
1.1.3兩階段提交6
1.2搭建實驗環(huán)境8
1.2.1實驗環(huán)境說明8
1.2.2安裝MySQL8
1.3配置異步復制12
1.3.1空庫12
1.3.2脫機16
1.3.3聯(lián)機17
1.4小結20
第2章半同步復制21
2.1MySQL半同步復制簡介21
2.2性能提升22
2.2.1ACK異步化22
2.2.2控制從庫反饋的數(shù)量24
2.2.3二進制日志互斥鎖的改進25
2.3數(shù)據(jù)一致性26
2.3.1rpl_semi_sync_master_wait_point配置26
2.3.2sync_binlog配置28
2.3.3sync_relay_log配置30
2.4管理接口32
2.5配置半同步復制32
2.5.1安裝插件32
2.5.2啟用半同步復制34
2.5.3監(jiān)控半同步復制35
2.6測試37
2.6.1正常提交事務37
2.6.2回滾事務38
2.6.3rpl_semi_sync_master_wait_no_slave與從庫數(shù)量40
2.7小結44
第3章GTID與復制45
3.1GTID簡介45
3.1.1什么是GTID45
3.1.2GTID的格式與存儲46
3.2GTID生命周期54
3.2.1典型事務的GTID生命周期54
3.2.2GTID分配57
3.2.3gtid_next系統(tǒng)變量58
3.2.4gtid_purged系統(tǒng)變量60
3.3GTID自動定位68
3.4配置GTID復制70
3.4.1聯(lián)機配置GTID復制70
3.4.2聯(lián)機更改復制模式74
3.4.3GTID相關系統(tǒng)變量75
3.5GTID運維76
3.5.1跳過一個事務76
3.5.2mysqldump導出77
3.5.3主從切換78
3.6GTID81
3.7GTID集合運算函數(shù)84
3.7.1GTID內(nèi)置函數(shù)84
3.7.2用戶自定義函數(shù)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.4Blackhole引擎與日志服務器104
4.2復制性能108
4.2.1測試規(guī)劃108
4.2.2sync_binlog與innodb_flush_log_at_trx_commit111
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監(jiān)控延遲復制125
5.2部分復制125
5.2.1部分復制簡介126
5.2.2評估庫級復制選項126
5.2.3評估表級復制選項129
5.2.4復制規(guī)則應用134
5.2.5部分復制示例136
5.3主從切換139
5.3.1計劃內(nèi)主從切換139
5.3.2計劃外切換140
5.4小結148
第6章組復制149
6.1組復制基本原理149
6.1.1MySQL復制技術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組復制監(jiān)控165
6.2.3容錯示例165
6.3組復制性能172
6.3.1概述172
6.3.2測試規(guī)劃174
6.3.3消息壓縮177
6.3.4組通信線程循環(huán)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章MySQLRouter189
7.1MySQLRouter簡介189
7.1.1透明路由189
7.1.2元數(shù)據(jù)緩存190
7.1.3簡單重定向190
7.1.4部署與使用191
7.1.5MySQLRouter8.0的新特性192
7.2Router實現(xiàn)MySQL高可用示例192
7.2.1安裝和配置192
7.2.2自動故障轉移199
7.2.3負載均衡202
7.2.4讀寫分離202
7.2.5多實例202
7.3Router8安裝和配置205
7.3.1安裝205
7.3.2啟動206
7.3.3配置210
7.4小結214
第8章MySQLFabric215
8.1MySQLFabric簡介215
8.1.1MySQLFabric的用途215
8.1.2MySQLFabric架構216
8.2高可用性218
8.2.1概述218
8.2.2安裝與配置218
8.2.3HA功能測試226
8.3數(shù)據(jù)分片232
8.4MySQLFabric233
8.5小結234
第9章MMM235
9.1MMM簡介235
9.1.1基本功能235
9.1.2工作原理236
9.1.3典型用例237
9.1.4切換流程238
9.1.5系統(tǒng)需求238
9.2實現(xiàn)MySQL主主復制的高可用240
9.2.1基本環(huán)境240
9.2.2安裝和配置241
9.2.3功能測試244
9.3小結248
0章MHA249
10.1MHA簡介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安裝MHANode254
10.2.5安裝MHAManager255
10.2.6配置MHA255
10.2.7創(chuàng)建相關腳本257
10.2.8檢查MHA配置265
10.3功能測試267
10.3.1初始綁定VIP267
10.3.2測試自動切換267
10.3.3測試手工切換271
10.3.4測試在線主從切換273
10.3.5修復宕機的主庫276
10.4小結276
1章Keepalived+LVS277
11.1Keepalived簡介277
11.1.1VRRP協(xié)議277
11.1.2Keepalived架構設計278
11.2LVS簡介280
11.3實現(xiàn)MySQL主從復制中的讀寫分離及高可用281
11.3.1架構設計282
11.3.2安裝和配置283
11.3.3功能測試292
11.4實現(xiàn)MySQL雙主復制的讀寫負載均衡及高可用295
11.4.1架構設計295
11.4.2安裝和配置296
11.4.3功能測試301
11.5小結304
2章Heartbeat+HAProxy305
12.1Heartbeat簡介305
12.1.1Heartbeat組成模塊305
12.1.2Heartbeat工作原理307
12.2HAProxy簡介308
12.3實現(xiàn)MySQL主從復制的讀寫分離及高可用309
12.3.1架構設計310
12.3.2安裝和配置310
12.3.3功能測試320
12.4實現(xiàn)MySQL雙主復制的讀寫負載均衡及高可用323
12.4.1架構設計323
12.4.2安裝和配置324
12.4.3功能測試326
12.5小結329
3章InnoDBCluster330
13.1InnoDBCluster簡介330
13.1.1整體架構330
13.1.2MySQLShell331
13.1.3MySQLRouter333
13.1.4MySQL服務器集群333
13.2創(chuàng)建InnoDBCluster334
13.2.1檢查實例配置335
13.2.2配置實例337
13.2.3創(chuàng)建集群339
13.2.4向集群添加實例339
13.2.5查看集群狀態(tài)341
13.2.6基于已有組復制創(chuàng)建集群343
13.2.7配置MySQLRouter343
13.2.8測試客戶端連接346
13.2.9測試高可用性347
13.3使用MySQLShell管理InnoDBCluster349
13.3.1配置實例自動重新加入349
13.3.2從InnoDBCluster中刪除實例350
13.3.3重啟集群351
13.3.4解散InnoDBCluster352
13.3.5配置新主選舉權重354
13.3.6配置故障轉移一致性354
13.3.7更改組復制拓撲355
13.3.8設置InnoDBCluster選項356
13.4小結357
4章GaleraCluster358
14.1基本原理358
14.1.1同步復制359
14.1.2Galera復制架構361
14.1.3Galera工作原理362
14.1.4狀態(tài)轉移363
14.1.5流控365
14.1.6單節(jié)點故障與恢復367
14.1.7仲裁367
14.2安裝和配置371
14.2.1初始安裝371
14.2.2使用SST增加節(jié)點375
14.2.3使用IST增加節(jié)點376
14.3管理監(jiān)控380
14.3.1在線DDL380
14.3.2恢復主組件382
14.3.3重置仲裁385
14.3.4管理流控386
14.3.5自動逐出388
14.3.6啟用Galera仲裁員389
14.3.7Galera集群監(jiān)控391
14.4性能測試394
14.4.1測試規(guī)劃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
5章DRBD403
15.1DRBD簡介403
15.1.1工作原理403
15.1.2基本概念404
15.2DRBD安裝和配置405
15.2.1測試環(huán)境405
15.2.2安裝前的準備工作406
15.2.3下載安裝DRBD407
15.2.4配置DRBD407
15.3測試MySQL數(shù)據(jù)同步411
15.4Heartbeat+DRBD+MySQL高可用方案412
15.4.1配置413
15.4.2測試417
15.5小結419
6章優(yōu)化案例420
16.1快速生成數(shù)字輔助表420
16.2將MySQL去重操作優(yōu)化到422
16.2.1問題描述422
16.2.2巧用索引與變量423
16.2.3利用窗口函數(shù)431
16.2.4多線程并行432
16.3重疊時間段問題之算法優(yōu)化441
16.3.1問題描述與分析441
16.3.2優(yōu)化重疊查詢443
16.3.3改進取得活躍時段的算法449
16.3.4MySQL8的單條查詢解決方案456
16.4快速安全刪除MySQL大表458
16.4.1表刪除過程458
16.4.2創(chuàng)建硬鏈接459
16.4.3刪除表460
16.4.4刪除文件釋放空間460
16.5小結461