MySQL DBA 精英實戰課(全彩)
內容描述
本書既包括 MySQL 比較重要的基礎內容,如安裝、索引、鎖、事務、體系結構、主從復制(包括 GTID 復制、半同步復制、並行復制等)等,也包括 MySQL 的優化(從硬件、操作系統,參數、SQL 語句等方面的優化)、規範、安全、備份、監控、高可用(MHA、Orchestrator 和 MGR)、分庫分表、周邊工具等實戰內容。另外,本書增加了一些比較新的內容,如 MySQL 8.0 的新特性、雲時代 DBA 工作的變化等。本書可作為 MySQL 初學者、DBA、開發工程師、運維工程師、架構師等的參考資料。
目錄大綱
目錄
第1 章MySQL 的基礎知識/1
1.1 數據庫的安裝全過程/1
1.1.1 平台的選擇/1
1.1.2 安裝包的選擇/2
1.1.3 系統環境的配置/3
1.1.4 數據庫的安裝/3
1.2 數據庫的簡單使用/7
1.2.1 連接/7
1.2.2 數據庫的創建和使用/8
1.2.3 增、刪、改、查/8
1.3 總結/9
第2 章MySQL 的索引/10
2.1 索引算法/10
2.1.1 順序查找/10
2.1.2 二分查找/10
2.1.3 二叉查找樹/11
2.1.4 平衡二叉樹/12
2.1.5 B 樹/12
2.1.6 B+樹/13
2.1.7 B+樹索引/13
2.2 MySQL 中的索引類型/14
2.2.1 聚集索引/14
2.2.2 輔助索引/15
2.2.3 唯#一索引/17
2.2.4 聯合索引/18
2.3 MySQL 中的索引優化/21
2.3.1 ICP /21
2.3.2 MRR /23
2.4 關於索引的建議/24
2.5 總結/24
第3 章MySQL 的鎖/25
3.1 共享鎖和排他鎖/25
3.2 意向鎖/25
3.3 記錄鎖、間隙鎖、插入意向鎖和臨鍵鎖/27
3.4 MDL /29
3.5 死鎖/31
3.6 總結/34
第4 章MySQL 的事務/35
4.1 事務的特性/35
4.2 事務的實現/35
4.2.1 原子性的實現/36
4.2.2 一致性的實現/36
4.2.3 隔離性的實現/36
4.3 MVCC 實現/37
4.3.1 什麼是MVCC /38
4.3.2 實現的原理/38
4.4 普通讀和當前讀/40
4.4.1 普通讀/40
4.4.2 當前讀/41
4.4.3 小結/42
4.5 總結/42
第5 章MySQL 的體系結構/43
5.1 MySQL 的結構/43
5.2 存儲引擎/44
5.3 InnoDB 的體系結構/46
5.3.1 內存結構/46
5.3.2 磁盤結構/48
5.4 總結/53
第6 章MySQL 常用的日誌文件/54
6.1 Binlog /54
6.1.1 Binlog 基礎/54
6.1.2 開啟和關閉Binlog /55
6.1.3 Binlog 的作用/56
6.1.4 Binlog 記錄的格式/56
6.1.5 Binlog 的解析/57
6.1.6 MySQL 8.0 Binlog加密/59
6.1.7 Binlog 的清除/60
6.1.8 Binlog 的落盤/61
6.1.9 Binlog 相關的參數/62
6.2 General Log /62
6.2.1 General Log 的開啟/62
6.2.2 General Log 的用法/63
6.3 Slow Log /63
6.3.1 Slow Log 的開啟/64
6.3.2 Slow Log 的特殊設置/64
6.3.3 Slow Log 的內容解析/64
6.3.4 MySQL 8.0 慢查詢額外信息的輸出/66
6.4 Error Log /66
6.4.1 Error Log 的配置/67
6.4.2 Error Log 的切割/67
6.4.3 借助Error Log 定位的問題/67
6.5 Redo Log /68
6.5.1 Redo Log 初探/68
6.5.2 Redo Log 的落盤/69
6.5.3 Redo Log 的數量及大小修改/71
6.5.4 CheckPoint /72
6.5.5 LSN /72
6.5.6 MySQL 8.0 中的RedoLog 歸檔/73
6.5.7 MySQL 8.0 中的RedoLog 禁用/74
6.6 Undo Log /75
6.6.1 初識Undo Log /75
6.6.2 Undo Log 的Purge /76
6.6.3 兩種Undo Log /76
6.6.4 Undo Log 的記錄格式/76
6.6.5 回滾時刻/77
6.6.6 Undo Log 的相關配置/77
6.7 總結/77
6.7.1 Binlog 和Redo Log 的區別/78
6.7.2 Undo Log 和RedoLog 的區別/78
第7 章MySQL 的優化/79
7.1 硬件優化/79
7.1.1 硬件的選擇/79
7.1.2 RAID 的選擇/80
7.2 操作系統的優化/82
7.2.1 文件系統的選擇/82
7.2.2 系統參數的選擇/82
7.2.3 MySQL 多實例資源隔離優化/83
7.3 參數調優/87
7.3.1 參數的加載順序/87
7.3.2 常用參數的調優/88
7.4 慢查詢分析/97
7.4.1 Explain /98
7.4.2 Performance Schema分析/105
7.4.3 Trace 追踪器/107
7.5 SQL 語句優化/113
7.5.1 分頁查詢優化/113
7.5.2 not in 優化/116
7.5.3 order by 優化/119
7.5.4 group by 優化/122
7.5.5 索引hint 優化/123
7.6 總結/124
第8 章MySQL 的規範/125
8.1 建表的規範/125
8.2 部署和操作的規範/128
8.3 SQL 的規範/129
8.4 總結/131
第9 章MySQL 的主從復制/132
9.1 主從復制的搭建/133
9.2 GTID 複製/135
9.2.1 GTID 主從復制的配置/136
9.2.2 GTID 的相關知識/138
9.2.3 GTID 的自動定位/140
9.2.4 使用GTID 複製模式的限制/141
9.3 MySQL 複製報錯的處理/141
9.3.1 主從復制crash-safe /141
9.3.2 跳過GTID 模式下的複制中斷錯誤/142
9.4 MySQL 半同步複製/145
9.4.1 MySQL 半同步複製的注意事項/146
9.4.2 MySQL 半同步複製中的無損複製/146
9.4.3 無損複製的配置和參數/147
9.4.4 無損複製的改進/150
9.5 MySQL 並行複制/151
9.5.1 MySQL 並行複制的原理和演進/151
9.5.2 MySQL 並行複制的配置/152
9.6 總結/153
第10 章MySQL 的安全/154
10.1 安全指南/154
10.2 訪問控制/154
10.3 預留賬戶/155
10.4 角色管理/156
10.5 密碼管理/157
10.5.1 密碼過期/158
10.5.2 密碼重用/159
10.5.3 密碼驗證/160
10.5.4 雙密碼支持/161
10.5.5 隨機密碼/161
10.5.6 密碼試錯/162
10.6 賬戶資源限制/162
10.7 加密連接/163
10.8 審計/164
10.9 總結/166
第11 章MySQL 的備份/167
11.1 物理備份和邏輯備份/167
11.2 mysqldump /167
11.2.1 備份用戶的權限/168
11.2.2 備份舉例及參數解釋/168
11.2.3 數據恢復/178
11.3 mydumper /178
11.3.1 mydumper 的安裝/179
11.3.2 使用mydumper備份數據/179
11.3.3 使用myloader 進行數據恢復/180
11.4 XtraBackup /181
11.4.1 XtraBackup 的安裝/181
11.4.2 XtraBackup 的工作流程/181
11.4.3 XtraBackup 的用法舉例/182
11.5 Clone Plugin /185
11.5.1 Clone Plugin 的安裝/185
11.5.2 Clone Plugin 的用法舉例/185
11.6 總結/187
第12 章MySQL 的監控/188
12.1 常見的監控項/188
12.1.1 系統相關/188
12.1.2 狀態相關/188
12.1.3 鎖相關/190
12.1.4 連接相關/191
12.1.5 複製相關/192
12.1.6 參數相關/193
12.1.7 業務相關/193
12.2 使用Zabbix 監控MySQL /194
12.2.1 架構圖/194
12.2.2 實驗環境/195
12.2.3 安裝Zabbix Server /195
12.2.4 配置Zabbix 數據庫/195
12.2.5 編輯配置文件/196
12.2.6 啟動Zabbix Server /196
12.2.7 Zabbix Web 界面初始化/197
12.2.8 安裝Zabbix Agent /201
12.2.9 安裝Percona 插件/201
12.2.10 在Agent 上創建Zabbix 監控用戶/202
12.2.11 修改配置文件/202
12.2.12 測試監控/202
12.2.13 導入Percona 模板/203
12.2.14 Zabbix Web 增加主機配置/205
12.2.15 查看監控數據/207
12.3 使用Prometheus 監控MySQL /208
12.3.1 架構圖/208
12.3.2 實驗環境/209
12.3.3 部署Prometheus /209
12.3.4 部署node_exporter組件/210
12.3.5 部署mysqld_exporter組件/211
12.3.6 配置Prometheus獲取監控數據/212
12.3.7 部署Grafana /215
12.3.8 為Grafana 配置Prometheus 數據源/216
12.3.9 使用Grafana 展示Linux 的監控數據/218
12.3.10 使用Grafana 展示MySQL 的監控數據/220
12.4 使用PMM 監控MySQL /222
12.4.1 架構圖/222
12.4.2 實驗環境/222
12.4.3 安裝並啟動Docker /222
12.4.4 安裝PMM Server /223
12.4.5 安裝PMM Client /224
12.4.6 PMM Client 連接PMM Server /225
12.4.7 配置MySQL 監控/225
12.4.8 打開監控頁面/226
12.5 總結/227
第13 章MySQL 的高可用/228
13.1 MHA /228
13.1.1 架構體系/229
13.1.2 MHA 工具包/229
13.1.3 部署和配置MHA /230
13.1.4 原理/233
13.1.5 小結/234
13.2 Orchestrator /236
13.2.1 主要功能/236
13.2.2 優勢/236
13.2.3 高可用/236
13.2.4 執行計劃/238
13.2.5 集群重塑/239
13.2.6 部署和配置Orchestrator /240
13.2.7 參數配置/242
13.2.8 Hook 介紹/243
13.2.9 集群的使用/245
13.2.10 小結/247
13.3 InnoDB Cluster /250
13.3.1 MGR 初探/251
13.3.2 MGR 與傳統複製的區別/251
13.3.3 部署InnoDB Cluster /253
13.3.4 InnoDB Cluster 的常用操作/261
13.3.5 MGR 的原理/265
13.3.6 MGR 的一致性保證/267
13.4 總結/269
第14 章MySQL 的分庫分錶/270
14.1 分庫分錶的原則/270
14.2 分庫分錶的場景/270
14.3 拆分模式/271
14.3.1 垂直拆分/271
14.3.2 水平拆分/271
14.4 分庫分錶的工具/272
14.5 分庫分錶後面臨的問題/273
14.5.1 事務支持問題/273
14.5.2 跨庫查詢問題/273
14.5.3 中間件高可用問題/273
14.6 總結/274
第15 章MySQL 的周邊工具/275
15.1 Redis /275
15.1.1 MySQL 與Redis 配合完成秒殺場景/275
15.1.2 如何保證Redis 和MySQL 數據一致/276
15.2 ClickHouse 和ClickTail /277
15.3 Percona Toolkit /284
15.3.1 pt-osc /284
15.3.2 pt-query-digest /284
15.3.3 pt-kill /286
15.3.4 pt-table-checksum /287
15.3.5 pt-table-sync /287
15.4 總結/287
第16 章MySQL 8.0 的新特性/288
16.1 事務性數據字典/288
16.1.1 MySQL 8.0 之前版本的數據字典/288
16.1.2 MySQL 8.0 之前版本的數據字典存在的問題/289
16.1.3 MySQL 8.0 的數據字典/290
16.1.4 序列化字典信息/292
16.1.5 MySQL 8.0 的數據字典的優勢/293
16.2 快速加列/293
16.2.1 快速加列功能的使用和限制/293
16.2.2 快速加列的原理/294
16.2.3 快速加列的過程/295
16.3 原子DDL /295
16.3.1 原子DDL 的使用範圍和限制/295
16.3.2 原子DDL 的特性和操作/296
16.3.3 原子DDL 的原理/298
16.3.4 原子DDL 的調試/298
16.4 資源組/299
16.4.1 資源組系統和權限準備/299
16.4.2 查看資源組信息/300
16.4.3 使用資源組/301
16.5 不可見索引/302
16.6 窗口函數/304
16.6.1 窗口函數的特性/304
16.6.2 窗口函數的使用/304
16.7 持久化全局變量/309
16.8 其他新特性/310
16.9 總結/311
第17 章云時代DBA 工作的變化/312
17.1 3 種類型的雲/312
17.2 雲應用的分類/313
17.2.1 SaaS /313
17.2.2 IaaS /313
17.2.3 PaaS /313
17.2.4 DBaaS /314
17.3 RDS /314
17.4 雲原生數據庫/314
17.5 上公有云的好處/314
17.6 上公有云的缺點/315
17.7 數據庫上公有云前的注意事項/315
17.8 傳統DBA 的工作/316
17.9 上雲後DBA 工作的變化/316
17.9.1 關注點/317
17.9.2 監控/317
17.9.3 備份/318
17.9.4 遷移/319
17.9.5 雲數據庫的使用規範/322
17.9.6 雲產品文檔/323
17.9.7 命令行工具/323
17.9.8 API/SDK 工具/324
17.9.9 成本控制/324
17.10 雲時代DBA 的發展方向/325
17.11 總結/325