MySQL數(shù)據(jù)庫是現(xiàn)代軟件系統(tǒng)基礎(chǔ)應(yīng)用的核心組成部分,如何保持MySQL的高可用性在系統(tǒng)應(yīng)用中就變得極為重要。本書從復(fù)制、中間件、集群、存儲(chǔ)、優(yōu)化五個(gè)方面介紹MySQL高可用技術(shù)。
本書分為16章,內(nèi)容包括異步復(fù)制、半同步復(fù)制、GTID與復(fù)制、復(fù)制拓?fù)渑c性能、延遲復(fù)制與部分復(fù)制、組復(fù)制、MySQL Router、MySQL Fabric、MMM、MHA、Keepalived + LVS、Heartbeat + HAProxy、InnoDB Cluster、Galera Cluster、DRBD、優(yōu)化案例等。
本書適合DBA、系統(tǒng)管理運(yùn)維、應(yīng)用程序開發(fā)、架構(gòu)師等MySQL相關(guān)技術(shù)人員作為參考書,也適合作為高等院校和培訓(xùn)學(xué)校相關(guān)專業(yè)的技術(shù)培訓(xùn)教材。
"網(wǎng)上關(guān)于MySQL的資料比比皆是,但大部分都是針對單一具體問題的解答,例如如何配置MySQL雙主復(fù)制等,全面系統(tǒng)講述MySQL高可用這方面的資料并不多見。而且,這些資料大多只給出簡單的實(shí)現(xiàn)方法,缺少相應(yīng)的理論背景知識(shí)和分析驗(yàn)證過程。這是我寫這本書的第二個(gè)原因,希望能填補(bǔ)缺口,讓讀者不但知其然,也知其所以然。 從2000年至今的20年里,我一直從事各種數(shù)據(jù)庫相關(guān)的應(yīng)用開發(fā)和管理工作,尤其是近年來一直跟MySQL數(shù)據(jù)庫打交道。從簡單的單實(shí)例,到各種復(fù)制,再到集群以及與中間件的配合,在其使用上積累等
王雪迎 ,畢業(yè)于中國地質(zhì)大學(xué)計(jì)算機(jī)專業(yè),不錯(cuò)工程師,20年數(shù)據(jù)庫、數(shù)據(jù)倉庫相關(guān)技術(shù)工作經(jīng)驗(yàn)。先后供職于北京現(xiàn)代商業(yè)信息技術(shù)有限公司、北京在線九州信息技術(shù)服務(wù)有限公司、華北計(jì)算技術(shù)研究所、北京優(yōu)貝在線網(wǎng)絡(luò)科技有限公司,擔(dān)任DBA、數(shù)據(jù)架構(gòu)師等職位。著有圖書《Hadoop構(gòu)建數(shù)據(jù)倉庫實(shí)踐》《HAWQ數(shù)據(jù)倉庫與數(shù)據(jù)挖掘?qū)崙?zhàn)》《SQL機(jī)器學(xué)習(xí)庫MADlib技術(shù)解析》。
第1章異步復(fù)制1
1.1MySQL異步復(fù)制簡介1
1.1.1復(fù)制的用途1
1.1.2復(fù)制如何工作2
1.1.3兩階段提交6
1.2搭建實(shí)驗(yàn)環(huán)境8
1.2.1實(shí)驗(yàn)環(huán)境說明8
1.2.2安裝MySQL8
1.3配置異步復(fù)制12
1.3.1空庫12
1.3.2脫機(jī)16
1.3.3聯(lián)機(jī)17
1.4小結(jié)20
第2章半同步復(fù)制21
2.1MySQL半同步復(fù)制簡介21
2.2性能提升22
2.2.1ACK異步化22
2.2.2控制從庫反饋的數(shù)量24
2.2.3二進(jìn)制日志互斥鎖的改進(jìn)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配置半同步復(fù)制32
2.5.1安裝插件32
2.5.2啟用半同步復(fù)制34
2.5.3監(jiān)控半同步復(fù)制35
2.6測試37
2.6.1正常提交事務(wù)37
2.6.2回滾事務(wù)38
2.6.3rpl_semi_sync_master_wait_no_slave與從庫數(shù)量40
2.7小結(jié)44
第3章GTID與復(fù)制45
3.1GTID簡介45
3.1.1什么是GTID45
3.1.2GTID的格式與存儲(chǔ)46
3.2GTID生命周期54
3.2.1典型事務(wù)的GTID生命周期54
3.2.2GTID分配57
3.2.3gtid_next系統(tǒng)變量58
3.2.4gtid_purged系統(tǒng)變量60
3.3GTID自動(dòng)定位68
3.4配置GTID復(fù)制70
3.4.1聯(lián)機(jī)配置GTID復(fù)制70
3.4.2聯(lián)機(jī)更改復(fù)制模式74
3.4.3GTID相關(guān)系統(tǒng)變量75
3.5GTID運(yùn)維76
3.5.1跳過一個(gè)事務(wù)76
3.5.2mysqldump導(dǎo)出77
3.5.3主從切換78
3.6GTID81
3.7GTID集合運(yùn)算函數(shù)84
3.7.1GTID內(nèi)置函數(shù)84
3.7.2用戶自定義函數(shù)84
3.7.3使用示例85
3.8小結(jié)88
第4章復(fù)制拓?fù)浣Y(jié)構(gòu)與性能89
4.1復(fù)制拓?fù)浣Y(jié)構(gòu)89
4.1.1一主一(多)從89
4.1.2雙(多)主復(fù)制91
4.1.3多源復(fù)制99
4.1.4Blackhole引擎與日志服務(wù)器104
4.2復(fù)制性能108
4.2.1測試規(guī)劃108
4.2.2sync_binlog與innodb_flush_log_at_trx_commit111
4.2.3組提交與多線程復(fù)制111
4.2.4基于WriteSet的多線程復(fù)制117
4.3小結(jié)120
第5章延遲復(fù)制與部分復(fù)制121
5.1延遲復(fù)制121
5.1.1延遲復(fù)制簡介121
5.1.2延遲復(fù)制時(shí)間戳124
5.1.3監(jiān)控延遲復(fù)制125
5.2部分復(fù)制125
5.2.1部分復(fù)制簡介126
5.2.2評估庫級復(fù)制選項(xiàng)126
5.2.3評估表級復(fù)制選項(xiàng)129
5.2.4復(fù)制規(guī)則應(yīng)用134
5.2.5部分復(fù)制示例136
5.3主從切換139
5.3.1計(jì)劃內(nèi)主從切換139
5.3.2計(jì)劃外切換140
5.4小結(jié)148
第6章組復(fù)制149
6.1組復(fù)制基本原理149
6.1.1MySQL復(fù)制技術(shù)149
6.1.2組復(fù)制使用場景151
6.1.3組復(fù)制相關(guān)服務(wù)151
6.1.4組復(fù)制插件體系結(jié)構(gòu)152
6.1.5組復(fù)制分布式恢復(fù)153
6.2組復(fù)制安裝部署156
6.2.1部署單主模式組復(fù)制157
6.2.2組復(fù)制監(jiān)控165
6.2.3容錯(cuò)示例165
6.3組復(fù)制性能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主從、半同步、組復(fù)制性能對比測試183
6.4組復(fù)制要求與185
6.4.1組復(fù)制要求185
6.4.2組復(fù)制187
6.5小結(jié)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實(shí)現(xiàn)MySQL高可用示例192
7.2.1安裝和配置192
7.2.2自動(dòng)故障轉(zhuǎn)移199
7.2.3負(fù)載均衡202
7.2.4讀寫分離202
7.2.5多實(shí)例202
7.3Router8安裝和配置205
7.3.1安裝205
7.3.2啟動(dòng)206
7.3.3配置210
7.4小結(jié)214
第8章MySQLFabric215
8.1MySQLFabric簡介215
8.1.1MySQLFabric的用途215
8.1.2MySQLFabric架構(gòu)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小結(jié)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實(shí)現(xiàn)MySQL主主復(fù)制的高可用240
9.2.1基本環(huán)境240
9.2.2安裝和配置241
9.2.3功能測試244
9.3小結(jié)248
0章MHA249
10.1MHA簡介249
10.1.1基本功能249
10.1.2切換流程250
10.1.3部署架構(gòu)250
10.1.4主要特點(diǎn)251
10.1.5工具介紹252
10.2安裝和配置252
10.2.1配置主從復(fù)制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)建相關(guān)腳本257
10.2.8檢查MHA配置265
10.3功能測試267
10.3.1初始綁定VIP267
10.3.2測試自動(dòng)切換267
10.3.3測試手工切換271
10.3.4測試在線主從切換273
10.3.5修復(fù)宕機(jī)的主庫276
10.4小結(jié)276
1章Keepalived+LVS277
11.1Keepalived簡介277
11.1.1VRRP協(xié)議277
11.1.2Keepalived架構(gòu)設(shè)計(jì)278
11.2LVS簡介280
11.3實(shí)現(xiàn)MySQL主從復(fù)制中的讀寫分離及高可用281
11.3.1架構(gòu)設(shè)計(jì)282
11.3.2安裝和配置283
11.3.3功能測試292
11.4實(shí)現(xiàn)MySQL雙主復(fù)制的讀寫負(fù)載均衡及高可用295
11.4.1架構(gòu)設(shè)計(jì)295
11.4.2安裝和配置296
11.4.3功能測試301
11.5小結(jié)304
2章Heartbeat+HAProxy305
12.1Heartbeat簡介305
12.1.1Heartbeat組成模塊305
12.1.2Heartbeat工作原理307
12.2HAProxy簡介308
12.3實(shí)現(xiàn)MySQL主從復(fù)制的讀寫分離及高可用309
12.3.1架構(gòu)設(shè)計(jì)310
12.3.2安裝和配置310
12.3.3功能測試320
12.4實(shí)現(xiàn)MySQL雙主復(fù)制的讀寫負(fù)載均衡及高可用323
12.4.1架構(gòu)設(shè)計(jì)323
12.4.2安裝和配置324
12.4.3功能測試326
12.5小結(jié)329
3章InnoDBCluster330
13.1InnoDBCluster簡介330
13.1.1整體架構(gòu)330
13.1.2MySQLShell331
13.1.3MySQLRouter333
13.1.4MySQL服務(wù)器集群333
13.2創(chuàng)建InnoDBCluster334
13.2.1檢查實(shí)例配置335
13.2.2配置實(shí)例337
13.2.3創(chuàng)建集群339
13.2.4向集群添加實(shí)例339
13.2.5查看集群狀態(tài)341
13.2.6基于已有組復(fù)制創(chuàng)建集群343
13.2.7配置MySQLRouter343
13.2.8測試客戶端連接346
13.2.9測試高可用性347
13.3使用MySQLShell管理InnoDBCluster349
13.3.1配置實(shí)例自動(dòng)重新加入349
13.3.2從InnoDBCluster中刪除實(shí)例350
13.3.3重啟集群351
13.3.4解散InnoDBCluster352
13.3.5配置新主選舉權(quán)重354
13.3.6配置故障轉(zhuǎn)移一致性354
13.3.7更改組復(fù)制拓?fù)?55
13.3.8設(shè)置InnoDBCluster選項(xiàng)356
13.4小結(jié)357
4章GaleraCluster358
14.1基本原理358
14.1.1同步復(fù)制359
14.1.2Galera復(fù)制架構(gòu)361
14.1.3Galera工作原理362
14.1.4狀態(tài)轉(zhuǎn)移363
14.1.5流控365
14.1.6單節(jié)點(diǎn)故障與恢復(fù)367
14.1.7仲裁367
14.2安裝和配置371
14.2.1初始安裝371
14.2.2使用SST增加節(jié)點(diǎn)375
14.2.3使用IST增加節(jié)點(diǎn)376
14.3管理監(jiān)控380
14.3.1在線DDL380
14.3.2恢復(fù)主組件382
14.3.3重置仲裁385
14.3.4管理流控386
14.3.5自動(dòng)逐出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負(fù)載均衡399
14.5.1安裝399
14.5.2配置400
14.5.3啟動(dòng)400
14.5.4測試401
14.6小結(jié)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安裝前的準(zhǔn)備工作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小結(jié)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重疊時(shí)間段問題之算法優(yōu)化441
16.3.1問題描述與分析441
16.3.2優(yōu)化重疊查詢443
16.3.3改進(jìn)取得活躍時(shí)段的算法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小結(jié)461