部分 基礎篇
章 MySQL的安裝與配置2
1.1MySQL的下載2
1.1.1在Windows平颱下下載MySQL3
1.1.2在Linux平颱下下載MySQL3
1.2MySQL的安裝5
1.2.1在Windows平颱下安裝MySQL5
1.2.2在Linux平颱下安裝MySQL8
1.3MySQL的配置12
1.3.1Windows平颱下配置MySQL12
1.3.2Linux平颱下配置MySQL13
1.4啓動和關閉MySQL服務13
1.4.1在Windows平颱下啓動和關閉MySQL服務13
1.4.2在Linux平颱下啓動和關閉MySQL服務13
1.5小結14
第2章 SQL基礎15
2.1SQL簡介15
2.2(My)SQL使用入門15
2.2.1SQL分類15
2.2.2DDL語句16
2.2.3DML語句23
2.2.4DCL語句33
2.3幫助的使用34
2.3.1按照層次看幫助34
2.3.2快速查閱幫助35
2.4查詢元數據信息36
2.5小結37
第3章MySQL支持的數據類型38
3.1數值類型38
3.2日期時間類型43
3.3字符串類型49
3.3.1CHAR和VARCHAR類型50
3.3.2BINARY和VARBINARY類型51
3.3.3ENUM類型51
3.3.4SET類型52
3.4JSON類型52
3.5小結54
第4章MySQL中的運算符55
4.1算術運算符55
4.2比較運算符56
4.3邏輯運算符59
4.4位運算符60
4.5運算符的優先級61
4.6小結62
第5章常用函數63
5.1字符串函數63
5.2數值函數66
5.3日期和時間函數68
5.4流程函數71
5.5JSON函數73
5.5.1創建JSON函數74
5.5.2查詢JSON函數75
5.5.3修改JSON的函數79
5.5.4查詢JSON元數據函數81
5.5.5JSON工具函數83
5.6窗口函數86
5.6.1ROW_NUMBER()87
5.6.2RANK()/DENSE_RANK()89
5.6.3PERCENT_RANK()/CUME_DIST()89
5.6.4NFILE(N)90
5.6.5NTH_VALUE(expr,N)91
5.6.6LAG(expr,N)/LEAD(expr,N)91
5.6.7FIRST_VALUE(expr)/LAST_VALUE(expr)92
5.6.8聚閤函數作為窗口函數93
5.7其他常用函數93
5.8小結95
第二部分開發篇
第6章錶類型(存儲引擎)的選擇98
6.1MySQL存儲引擎概述98
6.2各種存儲引擎的特性100
6.2.1MyISAM101
6.2.2InnoDB102
6.2.3MEMORY108
6.2.4MERGE109
6.2.5TokuDB111
6.3如何選擇閤適的存儲引擎112
6.4小結113
第7章選擇閤適的數據類型114
7.1CHAR與VARCHAR114
7.2TEXT與BLOB115
7.3浮點數與定點數118
7.4日期類型選擇120
7.5小結120
第8章字符集121
8.1字符集概述121
8.2Unicode簡述121
8.3漢字及一些常見字符集123
8.4怎樣選擇閤適的字符集124
8.5MySQL支持的字符集簡介125
8.6MySQL字符集的設置126
8.6.1服務器字符集和排序規則126
8.6.2數據庫字符集和排序規則127
8.6.3錶字符集和排序規則127
8.6.4列字符集和排序規則128
8.6.5連接字符集和排序規則128
8.7字符集的修改步驟129
8.8小結129
第9章索引的設計和使用130
9.1索引概述130
9.2設計索引的原則131
9.3索引設計的誤區132
9.4索引設計的一般步驟132
9.5BTREE索引與HASH索引133
9.6索引在MySQL 8.0中的改進134
9.6.1不可見索引134
9.6.2倒序索引135
9.7小結136
0章 開發常用數據庫對象137
10.1視圖137
10.1.1什麼是視圖137
10.1.2視圖操作137
10.1.3創建或者修改視圖137
10.1.4刪除視圖139
10.1.5查看視圖139
10.2存儲過程和函數140
10.2.1什麼是存儲過程和函數141
10.2.2存儲過程和函數的相關操作141
10.2.3創建、修改存儲過程或者函數141
10.2.4刪除存儲過程或者函數144
10.2.5查看存儲過程或者函數144
10.2.6變量的使用146
10.2.7定義條件和處理146
10.2.8光標的使用148
10.2.9流程控製149
10.2.10事件調度器152
10.3觸發器155
10.3.1創建觸發器155
10.3.2刪除觸發器157
10.3.3查看觸發器157
10.3.4觸發器的使用158
10.4小結159
1章 事務控製和鎖定語句160
11.1LOCK TABLES和UNLOCK TABLES160
11.2事務控製161
11.3分布式事務的使用166
11.3.1分布式事務的原理166
11.3.2分布式事務的語法166
11.3.3存在的問題168
11.4小結171
2章 SQL中的安全問題172
12.1SQL注入簡介172
12.2應用開發中可以采取的應對措施173
12.2.1PrepareStatement+Bind-Variable173
12.2.2使用應用程序提供的轉換函數174
12.2.3自己定義函數進行校驗174
12.3小結175
3章 SQL Mode及相關問題176
13.1MySQL SQL Mode簡介176
13.2SQL Mode的常見功能178
13.3常用的SQL Mode180
13.4SQL Mode在遷移中如何使用182
13.5小結183
4章 MySQL分區184
14.1分區概述184
14.2分區類型185
14.2.1RANGE分區187
14.2.2LIST 分區188
14.2.3COLUMNS 分區189
14.2.4HASH分區192
14.2.5KEY分區195
14.2.6子分區196
14.2.7MySQL分區處理NULL值的方式197
14.3分區管理199
14.3.1RANGE與LIST分區管理199
14.3.2HASH與KEY分區管理205
14.3.3交換分區206
14.4小結208
第三部分優化篇
5章 SQL優化210
15.1優化SQL語句的一般步驟210
15.1.1通過show status命令瞭解各種SQL的執行頻率210
15.1.2定位執行效率較低的SQL語句211
15.1.3通過EXPLAIN分析低效SQL的執行計劃211
15.1.4通過show profile分析SQL216
15.1.5通過trace分析優化器如何選擇執行計劃219
15.1.6確定問題並采取相應的優化措施220
15.2索引問題220
15.2.1索引的存儲分類220
15.2.2MySQL如何使用索引222
15.2.3查看索引使用情況231
15.3簡單實用的優化方法231
15.3.1定期分析錶和檢查錶232
15.3.2定期優化錶233
15.4常用SQL的優化233
15.4.1大批量插入數據234
15.4.2優化INSERT語句235
15.4.3優化ORDER BY語句235
15.4.4優化GROUP BY語句239
15.4.5優化JOIN操作239
15.4.6優化嵌套查詢243
15.4.7MySQL如何優化OR條件245
15.4.8優化分頁查詢246
15.4.9使用SQL提示248
15.5直方圖250
15.5.1什麼是直方圖250
15.5.2直方圖的分類251
15.5.3直方圖實例應用252
15.5.4直方圖小結256
15.6使用查詢重寫256
15.7常用SQL技巧259
15.7.1正則錶達式的使用259
15.7.2巧用RAND()提取隨機行261
15.7.3利用GROUP BY的WITH ROLLUP子句262
15.7.4用BIT GROUP FUNCTIONS做統計263
15.7.5數據庫名、錶名大小寫問題265
15.7.6使用外鍵需要注意的問題265
15.8小結266
6章 鎖問題267
16.1MySQL鎖概述267
16.2MyISAM錶鎖268
16.2.1查詢錶級鎖爭用情況268
16.2.2MySQL錶級鎖的鎖模式268
16.2.3如何加錶鎖269
16.2.4並發插入(Concurrent Inserts)271
16.2.5MyISAM的鎖調度272
16.3InnoDB鎖問題273
16.3.1背景知識273
16.3.2獲取InnoDB行鎖爭用情況275
16.3.3InnoDB的行鎖模式及加鎖方法276
16.3.4InnoDB行鎖實現方式279
16.3.5Next-Key鎖283
16.3.6恢復和復製的需要,對InnoDB鎖機製的影響284
16.3.7InnoDB在不同隔離級彆下的一緻性讀及鎖的差異287
16.3.8什麼時候使用錶鎖288
16.3.9關於死鎖289
16.4小結294
7章 優化MySQL Server296
17.1MySQL體係結構概覽296
17.2MySQL內存管理及優化298
17.2.1內存優化原則298
17.2.2MyISAM內存優化298
17.2.3InnoDB內存優化301
17.2.4調整用戶服務綫程排序緩存區305
17.3InnoDB log機製及優化305
17.3.1InnoDB重做日誌305
17.3.2innodb_flush_log_at_trx_commit的設置306
17.3.3設置log file size,控製檢查點307
17.3.4調整innodb_log_buffer_size308
17.4調整MySQL並發相關的參數308
17.4.1調整max_connections,提高並發連接308
17.4.2調整back_log309
17.4.3調整table_open_cache309
17.4.4調整thread_cache_size309
17.4.5innodb_lock_wait_timeout的設置309
17.5持久化全局變量309
17.6使用資源組310
17.7小結312
8章 磁盤I/O問題313
18.1使用固態硬盤313
18.2使用磁盤陣列314
18.2.1常見RAID級彆及其特性314
18.2.2如何選擇RAID級彆315
18.3虛擬文件捲或軟RAID315
18.4使用Symbolic Links分布I/O315
18.5禁止操作係統更新文件的atime屬性316
18.6調整I/O調度算法316
18.7RAID卡電池充放電問題318
18.7.1什麼是RAID卡電池充放電318
18.7.2RAID卡緩存策略319
18.7.3如何應對RAID卡電池充放電帶來的I/O性能波動321
18.8NUMA架構優化322
18.9小結325
9章 應用優化326
19.1優化數據錶的設計326
19.1.1優化錶的數據類型326
19.1.2通過拆分提高錶的訪問效率328
19.1.3逆規範化329
19.2數據庫應用優化330
19.2.1使用連接池330
19.2.2減少對MySQL的訪問330
19.2.3負載均衡331
19.3小結331
第20章 PS/SYS數據庫332
20.1Performance Schema庫332
20.1.1如何開啓PS庫332
20.1.2PS庫的錶333
20.2SYS 庫335
20.2.1SYS庫的對象335
20.2.2SYS對象的實際應用336
20.3小結340
第21章 故障診斷341
21.1故障診斷和處理的原則341
21.2故障處理一般流程343
21.2.1故障發現343
21.2.2故障定位345
21.2.3故障解決346
21.3典型故障案例349
21.3.1案例1349
21.3.2案例2353
21.4小結356
第四部分管理維護篇
第22章 MySQL不錯安裝和升級358
22.1Linux/UNIX平颱下的安裝358
22.1.1安裝包比較358
22.1.2安裝二進製包359
22.1.3安裝源碼包359
22.1.4參數設置方法360
22.2升級MySQL361
22.3小結363
第23章 MySQL中的常用工具364
23.1MySQL官方工具364
23.1.1mysql(客戶端連接工具)364
23.1.2mysqladmin(MySQL管理工具)371
23.1.3mysqlbinlog(日誌管理工具)371
23.1.4mysqlcheck(錶維護工具)378
23.1.5mysqldump(數據導齣工具)380
23.1.6mysqlpump(並行的數據導齣工具)384
23.1.7mysqlimport(數據導入工具)385
23.1.8mysqlshow(數據庫對象查看工具)385
23.1.9perror(錯誤代碼查看工具)387
23.1.10MySQL Shell387
23.2Percona工具包390
23.2.1pt-archiver(數據歸檔工具)391
23.2.2pt-config-diff(參數對比工具)393
23.2.3pt-duplicate-key-checker(檢查冗餘索引工具)394
23.2.4pt-find(查找工具)395
23.2.5pt-heartbeat(監控主從延遲工具)395
23.2.6pt-kill(殺死會話工具)397
23.2.7pt-online-schema-change(在綫修改錶結構工具)397
23.2.8pt-query-digest(SQL分析工具)399
23.2.9pt-table-checksum(數據檢驗工具)401
23.2.10pt-table-sync(數據同步工具)402
23.3小結403
第24章 MySQL日誌404
24.1錯誤日誌404
24.2二進製日誌405
24.2.1日誌的位置和格式405
24.2.2日誌的讀取406
24.2.3日誌的刪除407
24.2.4日誌的事件411
24.2.5日誌閃迴412
24.3查詢日誌415
24.3.1日誌的位置和格式415
24.3.2日誌的讀取416
24.4慢查詢日誌416
24.4.1文件位置和格式416
24.4.2日誌的讀取417
24.4.3Anemometer簡介419
24.5小結421
第25章 備份與恢復422
25.1備份/恢復策略422
25.2邏輯備份和恢復422
25.2.1備份423
25.2.2完全恢復425
25.2.3基於時間點恢復427
25.2.4基於位置恢復427
25.2.5並行恢復427
25.3物理備份和恢復428
25.3.1冷備份和熱備份428
25.3.2MyISAM存儲引擎的熱備份429
25.3.3InnoDB存儲引擎的熱備份429
25.4錶的導入和導齣438
25.4.1導齣438
25.4.2導入442
25.5小結445
第26章 MySQL權限與安全446
26.1MySQL權限管理446
26.1.1權限係統的工作原理446
26.1.2權限錶的存取446
26.1.3賬號管理449
26.2MySQL安全問題461
26.2.1操作係統相關的安全問題461
26.2.2數據庫相關的安全問題463
26.3其他安全設置選項471
26.3.1密碼插件471
26.3.2safe-user-create472
26.3.3錶空間加密473
26.3.4skip-grant-tables474
26.3.5skip-networking474
26.3.6skip-show-database475
26.4小結475
第27章 MySQL監控476
27.1如何選擇一個監控方案476
27.1.1選擇何種監控方式476
27.1.2如何選擇適閤自己的監控工具477
27.2常用的網絡監控工具477
27.2.1Open-Falcon簡介477
27.2.2Nagios簡介479
27.2.3Zabbix簡介480
27.2.4幾種常見開源軟件比較481
27.3Zabbix 部署481
27.3.1Zabbix Server482
27.3.2Zabbix Server配置與啓動482
27.3.3配置Zabbix Web服務端483
27.3.4Zabbix Agent安裝和配置485
27.3.5PMP插件介紹和部署486
27.3.6Zabbix Web端操作489
27.4性能醫生orzdba491
27.4.1orzdba安裝491
27.4.2orzdba使用492
27.5小結492
第28章 MySQL常見問題和應用技巧493
28.1忘記MySQL的root密碼493
28.2數據目錄磁盤空間不足的問題494
28.3mysql.sock丟失後如何連接數據庫495
28.4從mysqldump文件抽取需要恢復的錶496
28.5使用innobackupex備份恢復單錶497
28.6分析BINLOG,找齣寫的熱點錶498
28.7在綫DDL499
28.8小結502
第29章 自動化運維係統的開發503
29.1MySQL自動化運維背景503
29.2CMDB係統搭建504
29.2.1CMDB數據庫504
29.2.2批量管理係統505
29.2.3後颱API511
29.3任務調度係統515
29.3.1Celery安裝515
29.3.2Celery任務部署516
29.3.3Flower監控518
29.4客戶端搭建519
29.4.1Vue.js簡介519
29.4.2Vue項目搭建520
29.5自動化運維平颱實戰525
29.5.1搭建CMDB525
29.5.2搭建任務調度平颱528
29.5.3搭建客戶端529
29.5.4項目演示532
29.6小結532
第五部分架構篇
第30章MySQL復製534
30.1復製概述534
30.1.1復製中的各類文件536
30.1.23種復製方式537
30.1.3復製的4種常見架構540
30.2復製搭建543
30.2.1異步復製543
30.2.2多綫程復製547
30.2.3增強半同步復製553
30.3GTID(Global Transaction Identifier)558
30.3.1格式與存儲558
30.3.2gtid_purged561
30.3.3復製搭建565
30.3.4主從切換571
30.3.5常見問題572
30.4主要復製啓動選項576
30.4.1log-slave-updates576
30.4.2read-only/super_read_only576
30.4.3指定復製的數據庫或者錶577
30.4.4slave-skip-errors579
30.5日常管理維護579
30.5.1查看從庫復製狀態和進度579
30.5.2主從復製問題集錦580
30.5.3多主復製時的自增長變量衝突問題582
30.5.4如何提高復製的性能584
30.6小結588
第31章高可用架構589
31.1MHA架構589
31.1.1安裝部署MHA591
31.1.2應用連接配置598
31.1.3自動failover605
31.1.4網絡問題觸發的failover操作614
31.1.5手動failover614
31.1.6在綫進行切換615
31.1.7修復宕掉的Master617
31.2MGR架構617
31.2.1安裝部署MGR618
31.2.2監控625
31.2.3primary成員切換626
31.2.4重要特性628
31.2.5常見問題629
31.3InnoDB Cluster636
31.3.1安裝部署637
31.3.2初始化MySQL Router642
31.3.3集群Metadata643
31.3.4集群成員角色切換644
31.3.5集群刪除/增加節點646
31.3.6重新加入節點648
31.4小結649
第32章MySQL中間件650
32.1MySQL Router650
32.1.1MySQL Router的安裝651
32.1.2MySQL Router的初始化653
32.1.3MySQL Router策略驗證656
32.2Cetus架構658
32.2.1Cetus的安裝配置659
32.2.2Cetus的使用670
32.2.3Cetus日誌文件674
32.2.4Cetus的後端管理675
32.2.5Cetus的路由策略678
32.2.6常見問題681
32.3小結682
· · · · · · (
收起)