《千金良方——MySQL性能最佳化金字塔法則》是2019年10月電子工業出版社出版的圖書,作者是李春、羅小波、董紅禹。
基本介紹
- 中文名:千金良方——MySQL性能最佳化金字塔法則
- 作者:李春、羅小波、董紅禹
- 出版時間:2019年10月
- 出版社:電子工業出版社
- 頁數:728 頁
- ISBN:9787121375200
- 定價:129 元
- 開本:16 開
內容簡介,目錄,
內容簡介
本書一共分為3篇:基礎篇、案例篇和工具篇。“基礎篇”從理論基礎和基本原理層面介紹了MySQL的安裝與配置、升級和體系結構,information_schema、sys_schema、performance_schema和mysql_schema,MySQL複製,MySQL事務,SQL語句最佳化及架構設計基礎知識。“案例篇”從硬體和系統、MySQL架構等方面給出了性能最佳化的十幾個案例,包括:性能測試的基本最佳化思路和最需要關注的性能指標解釋、對日常SQL語句執行慢的基本定位、避免x86可用性的一般性方法、節能模式會怎樣影響性能、I/O存儲作為資料庫最重要的依賴是如何影響資料庫性能的、主備複製不一致可能有哪些原因、字元集不一致會造成哪些性能問題、在實際場景中鎖的爭用是怎樣的。“工具篇”介紹了在MySQL性能最佳化過程中需要用到的各種工具,包括:dmidecode、top、dstat等硬體和系統排查工具;FIO、sysbench、HammerDB等壓力測試工具;mysqldump、XtraBackup等備份工具;Percona、innotop、Prometheus等監控工具。
目錄
基 礎 篇
第1章 MYSQL初始化安裝、簡單安全加固 3
1.1 背景 3
1.2 初始化安裝 3
1.2.1 下載二進制安裝檔案 3
1.2.2 創建MYSQL用戶 3
1.2.3 創建程式、數據存放 4
1.2.4 解壓縮二進制安裝檔案並設定許可權 4
1.2.5 軟連結程式路徑,並設定MYSQL命令環境變數 5
1.2.6 配置MY.CNF檔案參數 5
1.2.7 初始化MYSQL 6
1.2.8 啟動MYSQL 7
1.3 簡單安全加固 8
1.3.1 登錄MYSQL 8
1.3.2 刪除非ROOT或非LOCALHOST的用戶並修改ROOT密碼 9
1.3.3 刪除TEST庫,清理MYSQL.DB表 10
1.4 創建用戶、庫、表、數據 12
1.4.1 創建管理用戶並授權 12
1.4.2 創建庫、表、程式賬號 13
1.4.3 插入數據 14
1.5 MYSQL參數模板 16
第2章 MYSQL常用的兩種升級方法 21
2.1 背景 21
2.2 MYSQL 5.5.54的安裝 21
2.3 升級MYSQL 5.5.54到MYSQL 5.6.35 21
2.3.1 使用MYSQL_UPGRADE直接升級數據字典庫 21
2.3.2 使用MYSQLDUMP邏輯備份數據 30
2.4 升級注意事項 38
第3章 MYSQL體系結構 41
3.1 快速安裝MYSQL 41
3.2 數據結構 43
3.3 MYSQL SERVER體系結構 46
3.4 MYSQL中的存儲引擎 48
3.5 INNODB存儲引擎體系結構 48
3.6 INNODB存儲引擎後台執行緒 52
3.7 MYSQL前台執行緒 54
第4章 PERFORMANCE_SCHEMA初相識 56
4.1 什麼是PERFORMANCE_SCHEMA 56
4.2 PERFORMANCE_SCHEMA使用快速入門 57
4.2.1 檢查當前資料庫版本是否支持 57
4.2.2 啟用PERFORMANCE_SCHEMA 58
4.2.3 PERFORMANCE_SCHEMA表的分類 59
4.2.4 PERFORMANCE_SCHEMA簡單配置與使用 62
第5章 PERFORMANCE_SCHEMA配置詳解 66
5.1 編譯時配置 66
5.2 啟動時配置 67
5.2.1 啟動選項 67
5.2.2 SYSTEM VARIABLES 69
5.3 運行時配置 71
5.3.1 PERFORMANCE_TIMERS表 71
5.3.2 SETUP_TIMERS表 72
5.3.3 SETUP_CONSUMERS表 73
5.3.4 SETUP_INSTRUMENTS表 76
5.3.5 SETUP_ACTORS表 82
5.3.6 SETUP_OBJECTS表 85
5.3.7 THREADS表 87
第6章 PERFORMANCE_SCHEMA套用示例薈萃 93
6.1 利用等待事件排查MYSQL性能問題 93
6.2 鎖問題排查 97
6.2.1 找出誰持有全局讀鎖 97
6.2.2 找出誰持有MDL鎖 100
6.2.3 找出誰持有表級鎖 104
6.2.4 找出誰持有行級鎖 107
6.3 查看最近的SQL語句執行信息 112
6.3.1 查看最近的TOP SQL語句 112
6.3.2 查看最近執行失敗的SQL語句 114
6.4 查看SQL語句執行階段和進度信息 117
6.4.1 查看SQL語句執行階段信息 117
6.4.2 查看SQL語句執行進度信息 120
6.5 查看最近的事務執行信息 121
6.6 查看多執行緒複製報錯詳情 123
第7章 SYS系統庫初相識 126
7.1 SYS系統庫使用基礎環境 126
7.2 SYS系統庫初體驗 127
7.3 SYS系統庫的進度報告功能 129
第8章 SYS系統庫配置表 132
8.1 SYS_CONFIG表 132
8.2 SYS_CONFIG_INSERT_SET_USER觸發器 136
8.3 SYS_CONFIG_UPDATE_SET_USER觸發器 136
第9章 SYS系統庫套用示例薈萃 138
9.1 查看慢SQL語句慢在哪裡 138
9.2 查看是否有事務鎖等待 140
9.3 查看是否有MDL鎖等待 141
9.4 查看INNODB緩衝池中的熱點數據有哪些 143
9.5 查看冗餘索引 144
9.6 查看未使用的索引 145
9.7 查詢表的增、刪、改、查數據量和I/O耗時統計信息 145
9.8 查看MYSQL磁碟檔案產生的磁碟流量與讀寫比例 146
9.9 查看哪些語句使用了全表掃描 147
9.10 查看哪些語句使用了檔案排序 148
9.11 查看哪些語句使用了臨時表 149
第10章 INFORMATION_SCHEMA初相識 151
10.1 什麼是INFORMATION_SCHEMA 151
10.2 INFORMATION_SCHEMA組成對象 153
10.2.1 SERVER層的統計信息字典表 153
10.2.2 SERVER層的表級別對象字典表 154
10.2.3 SERVER層的混雜信息字典表 155
10.2.4 INNODB層的系統字典表 156
10.2.5 INNODB層的鎖、事務、統計信息字典表 157
10.2.6 INNODB層的全文索引字典表 158
10.2.7 INNODB層的壓縮相關字典表 160
第11章 INFORMATION_SCHEMA套用示例薈萃 161
11.1 使用SERVER層的字典表查詢相關的元數據信息 161
11.1.1 查看資料庫中是否使用了外鍵 161
11.1.2 查看INNODB表空間檔案信息 162
11.1.3 查看索引的統計信息 165
11.1.4 查看錶的欄位相關信息 166
11.1.5 查看資料庫中是否使用了存儲程式 167
11.1.6 查看資料庫中的分區表信息 168
11.1.7 查看資料庫中的觸發器 169
11.1.8 查看資料庫中的計畫任務 170
11.1.9 查看客戶端會話的狀態信息 172
11.2 使用INNODB層的字典表查詢相關的元數據信息 173
11.2.1 查看索引列的信息 173
11.2.2 查看錶的欄位相關信息 175
11.2.3 查看事務鎖等待信息 176
11.2.4 查看INNODB緩衝池中的熱點數據有哪些 176
第12章 MYSQL系統庫之許可權系統表 177
12.1 USER 177
12.2 DB 179
12.3 TABLES_PRIV 180
12.4 COLUMNS_PRIV 181
12.5 PROCS_PRIV 182
12.6 PROXIES_PRIV 182
第13章 MYSQL系統庫之訪問許可權控制系統 184
13.1 訪問許可權控制系統概述 184
13.2 MYSQL提供了哪些許可權 185
13.3 MYSQL賬號命名規則 191
13.4 MYSQL賬號訪問控制兩階段 192
13.4.1 第一階段(賬號和密碼認證) 192
13.4.2 第二階段(許可權檢查) 196
13.5 許可權變更的影響 197
13.6 MYSQL常見連線問題 198
第14章 MYSQL系統庫之統計信息表 200
14.1 統計信息概述 200
14.2 統計信息表詳解 203
14.2.1 INNODB_TABLE_STATS 203
14.2.2 INNODB_INDEX_STATS 204
第15章 MYSQL系統庫之複製信息表 206
15.1 複製信息表概述 206
15.2 複製信息表詳解 207
15.2.1 SLAVE_MASTER_INFO 207
15.2.2 SLAVE_RELAY_LOG_INFO 209
15.2.3 SLAVE_WORKER_INFO 211
15.2.4 GTID_EXECUTED 215
15.2.5 NDB_BINLOG_INDEX 217
第16章 MYSQL系統庫之日誌記錄表 218
16.1 日誌信息概述 218
16.2 日誌表詳解 220
16.2.1 GENERAL_LOG 220
16.2.2 SLOW_LOG 223
第17章 MYSQL系統庫套用示例薈萃 228
17.1 查看用戶不同作用域的許可權 228
17.1.1 查看全局許可權 228
17.1.2 查看庫級別許可權 230
17.1.3 查看錶級別許可權 232
17.1.4 查看欄位級別許可權 234
17.2 查看統計信息 236
17.2.1 查看錶統計信息 236
17.2.2 查看索引統計信息 236
17.3 查看SQL日誌信息 237
第18章 複製技術的演進 245
18.1 複製格式概述 245
18.2 基於數據安全的複製技術演進 246
18.2.1 異步複製 246
18.2.2 半同步複製 247
18.2.3 增強半同步複製 249
18.2.4 組複製 250
18.2.5 GTID複製 253
18.3 基於複製效率的複製技術演進 255
18.3.1 單執行緒複製 255
18.3.2 DATABASE 並行複製 256
18.3.3 LOGICAL_CLOCK 並行複製 258
18.3.4 WRITESET並行複製 260
第19章 事務概念基礎 263
19.1 4種事務隔離級別和3種異常現象 263
19.1.1 標準的事務隔離級別 263
19.1.2 調整事務隔離級別 264
19.2 從事務提交談起 265
19.2.1 事務管理 265
19.2.2 資料庫中的檔案 266
19.2.3 WAL日誌先寫 266
19.3 MYSQL中的REDO日誌 267
19.3.1 REDO日誌落盤時間點 267
19.3.2 REDO日誌格式 267
19.3.3 相關參數及概念 269
19.3.4 CHECKPOINT概念 269
19.3.5 REDO日誌的設定 271
19.3.6 REDO日誌與BINLOG協調工作 273
19.4 MVCC介紹 274
19.4.1 MVCC原理 274
19.4.2 具體代碼 276
第20章 INNODB鎖 280
20.1 INNODB鎖概述 280
20.1.1 INNODB鎖分類 280
20.1.2 行鎖 280
20.1.3 表鎖 281
20.1.4 鎖模式對應的含義 282
20.2 加鎖驗證 282
20.2.1 REPEATABLE-READ隔離級別+表無顯式主鍵和索引 283
20.2.2 REPEATABLE-READ隔離級別+表有顯式主鍵但無索引 286
20.2.3 REPEATABLE-READ隔離級別+表無顯式主鍵但有索引 288
20.2.4 REPEATABLE-READ隔離級別+表有顯示主鍵和索引 291
20.2.5 READ-COMMITTED隔離級別+表無顯式主鍵和索引 293
20.2.6 READ-COMMITTED隔離級別+表有顯式主鍵無索引 295
20.2.7 READ-COMMITTED隔離級別+表無顯式主鍵有索引 295
20.2.8 READ-COMMITTED隔離級別+表有顯式主鍵和索引 296
第21章 SQL最佳化 299
21.1 SQL最佳化基礎概念 299
21.2 MYSQL中的JOIN算法 303
21.3 MYSQL中的最佳化特性 305
第22章 MYSQL讀寫擴展 308
22.1 分散式架構概述 308
22.2 分庫分表兩種方式 309
22.2.1 中間件方式 309
22.2.2 客戶端方式 309
22.2.3 客戶端方式與中間件方式不同 310
22.2.4 分庫與分表 310
22.3 中間件工作方式及原理 310
22.4 架構設計及業務場景 312
22.4.1 讀寫擴展案例 312
22.5 關於中間件的一些限制解釋 314
22.5.1 跨庫查詢、複雜的SQL語句支持 314
22.5.2 分散式事務 314
案 例 篇
第23章 性能測試指標和相關術語 317
23.1 測試目標分類 317
23.1.1 已知故障信息採集 317
23.1.2 預估壓力評測 317
23.2 性能測試指標 318
23.2.1 資料庫性能通用“切口” 318
23.2.2 測試通用術語 319
23.2.3 示例 320
23.3 本章小結 321
第24章 歷史問題診斷和現場故障分析 322
24.1 故障分析和驗證 322
24.1.1 歷史問題排查 322
24.1.2 線上問題分析 323
24.2 故障復現排查 323
24.3 本章小結 325
第25章 性能調優金字塔 326
25.1 硬體和系統調優 327
25.1.1 硬體最佳化 327
25.1.2 系統最佳化 327
25.2 MYSQL調優 328
25.2.1 參數調優 328
25.2.2 SQL/索引調優 329
25.3 架構調優 329
25.4 本章小結 329
第26章 SQL語句執行慢真假難辨 330
26.1 概述 330
26.2 測試環境 331
26.3 採集數據包 331
26.3.1 採集套用伺服器數據包 331
26.3.2 採集資料庫伺服器數據包 332
26.4 解析數據包 333
26.4.1 使用WIRESHARK解析數據包 333
26.4.2 使用TCPDUMP解析數據包 335
26.5 本章小結 337
第27章 如何避免三天兩頭換硬碟、記憶體、主機板 338
27.1 概述 338
27.2 伺服器標準化 338
27.3 上線前烤機 339
27.3.1 STRESS 339
27.3.2 FIO 341
27.3.3 資料庫烤機 341
27.4 本章小結 341
第28章 每隔45天的MYSQL性能低谷 342
28.1 存儲知識小普及 342
28.1.1 MYSQL存儲系統要求 342
28.1.2 存儲系統軟體層 343
28.1.3 存儲系統硬體層 343
28.2 每隔45天的性能抖動 344
28.3 影響I/O性能的三種RAID策略 348
28.3.1 電池充放電 348
28.3.2 巡讀 354
28.3.3 一致性檢查 356
28.4 本章小結 358
第29章 MYSQL連線無法自動釋放 359
29.1 環境配置 359
29.2 問題現象 359
29.3 診斷分析 359
29.4 解決方案 362
29.5 本章小結 362
第30章 查詢MYSQL偶爾比較慢 363
30.1 環境配置 363
30.2 問題現象 363
30.3 診斷分析 363
30.4 選擇VIP還是DNS訪問MYSQL 364
30.4.1 VIP之殤 364
30.4.2 DNS之痛 365
30.4.3 VIP切換還是DNS切換 365
30.5 CPU節能模式 365
30.6 本章小結 366
第31章 MYSQL最多只允許214個連線 367
31.1 環境配置 367
31.2 故障現象 367
31.3 故障分析 367
31.4 解決方案 370
31.5 MYSQL最大連線數為214的源碼解析 370
31.6 LINUX資源限制 371
31.6.1 資源拆分和組合 371
31.6.2 進程資源限制 372
31.6.3 MYSQL內部資源限制 374
31.7 本章小結 374
第32章 MYSQL掛起診斷思路 375
32.1 環境配置 375
32.2 問題現象 375
32.3 診斷分析 376
32.4 掛起時先做什麼 377
32.5 總結 377
第33章 硬體和系統調優 378
33.1 硬體和系統調優概覽 378
33.1.1 I/O:MYSQL 80%的性能瓶頸所在 378
33.2 CPU 384
33.3 網路 384
33.4 其他 385
33.5 總結 386
第34章 並發刪除數據造成死鎖 387
34.1 現象描述 387
34.2 如何閱讀死鎖日誌 388
34.3 表結構及操作步驟 390
34.4 總結 390
第35章 刪除不存在的數據造成死鎖 391
35.1 現象描述 391
35.2 問題分析 392
35.3 問題擴展 392
35.4 表結構及操作步驟 393
35.5 總結 393
第36章 插入意向鎖死鎖 394
36.1 現象描述 394
36.2 問題分析 395
36.3 總結 397
第37章 分頁查詢最佳化 398
37.1 現象描述 398
37.2 最佳化方案 398
第38章 子查詢最佳化——子查詢轉換為連線 400
38.1 現象描述 400
38.2 最佳化方案 401
第39章 子查詢最佳化——使用DELETE刪除數據 403
39.1 現象描述 403
39.2 最佳化方案 403
工 具 篇
第40章 硬體規格常用查看命令詳解 407
40.1 通用命令 407
40.1.1 LSHW 407
40.1.2 DMIDECODE 414
40.1.3 DMESG 419
40.2 CPU相關命令 420
40.3 磁碟相關命令 422
40.3.1 SMARTCTL 422
40.3.2 LSSCSI 424
40.4 網卡相關命令 426
40.4.1 LSPCI 426
40.4.2 ETHTOOL 428
40.5 HCA卡相關命令 430
第41章 系統負載常用查看命令詳解 433
41.1 TOP 433
41.1.1 命令行選項 433
41.1.2 互動式命令選項 434
41.1.3 輸出結果解讀 434
41.2 DSTAT 436
41.2.1 命令行選項 436
41.2.2 輸出結果解讀 438
41.3 MPSTAT 442
41.3.1 命令行選項 443
41.3.2 輸出結果解讀 443
41.4 SAR 444
41.4.1 命令行選項 444
41.4.2 輸出結果解讀 446
41.5 VMSTAT 453
41.5.1 命令行選項 453
41.5.2 輸出結果解讀 453
41.6 IOSTAT 455
41.6.1 命令行選項 455
41.6.2 輸出結果解釋 456
41.7 FREE 458
41.7.1 命令行選項 459
41.7.2 輸出結果解讀 459
41.8 IOTOP 460
41.8.1 命令行選項 461
41.8.2 互動式命令選項 461
41.8.3 輸出結果解讀 461
41.9 IFTOP 463
41.9.1 命令行選項 463
41.9.2 互動式命令選項 463
41.9.3 輸出結果解讀 464
41.10 IPERF 465
41.10.1 命令行選項 466
41.10.2 輸出結果解讀 467
第42章 FIO存儲性能壓測 469
42.1 安裝FIO 469
42.2 測試I/O性能 470
42.2.1 隨機寫 470
42.2.2 順序寫 470
42.2.3 隨機讀 471
42.2.4 順序讀 471
42.2.5 混合隨機讀寫 471
42.2.6 FIO配置檔案測試 471
42.3 參數和結果詳解 472
42.3.1 關鍵參數解釋 472
42.3.2 配置檔案 473
42.3.3 結果解析 475
42.4 FIO測試建議 476
42.5 課外閱讀 476
第43章 HAMMERDB線上事務處理測試 477
43.1 安裝和配置HAMMERDB 477
43.1.1 下載安裝包 477
43.1.2 安裝HAMMERDB 477
43.1.3 安裝HAMMERDB GUI依賴包 478
43.2 測試 481
43.3 課外閱讀 492
第44章 SYSBENCH資料庫壓測工具 493
44.1 安裝SYSBENCH 493
44.1.1 YUM安裝 493
44.1.2 RPM包安裝 493
44.1.3 編譯安裝 494
44.1.4 驗證安裝是否成功 494
44.2 測試案例 494
44.2.1 造數 495
44.2.2 資料庫讀寫測試 495
44.2.3 清理 496
44.3 SYSBENCH 參數詳解 496
44.3.1 SYSBENCH命令語法 496
44.3.2 OPTIONS 496
44.3.3 TESTNAME 500
44.3.4 COMMAND 502
44.4 資料庫測試輸出信息詳解 502
44.4.1 輸出結果概述 503
44.4.2 版本及關鍵測試參數輸出 504
44.4.3 中間統計結果輸出 504
44.4.4 整體統計結果輸出 504
44.5 課外閱讀 505
第45章 MYSQLADMIN和INNOTOP工具詳解 506
45.1 MYSQLADMIN 506
45.1.1 命令行選項 506
45.1.2 實戰演示 511
45.2 INNOTOP 513
45.2.1 安裝INNOTOP 513
45.2.2 命令行選項 514
45.2.3 互動式選項 515
45.2.4 實戰演示 516
第46章 利用PROMETHEUS+GRAFANA 搭建炫酷的MYSQL監控平台 524
46.1 安裝PROMETHEUS 525
46.1.1 下載程式包 525
46.1.2 解壓縮程式包 526
46.1.3 啟動PROMETHEUS 527
46.2 安裝GRAFANA 529
46.2.1 下載程式包 529
46.2.2 解壓縮程式包 530
46.2.3 啟動GRAFANA 530
46.2.4 在GRAFANA中導入GRAFANA-DASHBOARDS 531
46.3 監控節點部署 534
46.3.1 添加主機監控 534
46.3.2 添加MYSQL監控 535
46.3.3 監控DASHBOARD切換 536
第47章 PERCONA TOOLKIT常用工具詳解 538
47.1 PT-QUERY-DIGEST 538
47.1.1 命令行選項 538
47.1.2 實戰演示 550
47.2 PT-IOPROFILE 558
47.2.1 命令行選項 558
47.2.2 實戰演示 559
47.3 PT-INDEX-USAGE 560
47.3.1 命令行選項 561
47.3.2 實戰演示 563
47.4 PT-DUPLICATE-KEY-CHECKER 566
47.4.1 命令行選項 567
47.4.2 實戰演示 568
47.5 PT-MYSQL-SUMMARY/PT-SUMMARY 571
47.5.1 PT-MYSQL-SUMMARY 571
47.5.2 PT-SUMMARY 578
47.6 PT-PMP 584
47.6.1 命令行選項 585
47.6.2 實戰演示 585
47.7 PT-STALK 587
47.7.1 命令行選項 588
47.7.2 實戰演示 591
47.8 PT-SIFT 594
47.8.1 命令行選項 595
47.8.2 實戰演示 595
第48章 MYSQL主流備份工具之MYSQLDUMP詳解 598
48.1 簡介 598
48.2 原理 599
48.3 命令行選項 601
48.3.1 連線選項 601
48.3.2 檔案選項 602
48.3.3 DDL選項 603
48.3.4 調試選項 604
48.3.5 幫助選項 604
48.3.6 國際化選項——與字元集相關的選項 604
48.3.7 複製選項 605
48.3.8 輸出格式化選項 607
48.3.9 過濾選項 609
48.3.10 性能選項 612
48.3.11 事務選項 612
48.3.12 組合選項 614
48.4 實戰演示 614
48.4.1 完全備份與恢復 614
48.4.2 增量備份與恢復 616
48.4.3 搭建主從複製架構 616
48.4.4 克隆從庫 618
48.4.5 指定庫表備份與恢復 619
48.4.6 純文本備份與恢復 621
第49章 MYSQL主流備份工具之XTRABACKUP詳解 624
49.1 簡介 624
49.2 原理 624
49.3 命令行選項 633
49.4 實戰演示 644
49.4.1 完全備份與恢復 644
49.4.2 增量備份與恢復 645
49.4.3 基於時間點的恢復 649
49.4.4 搭建主從複製架構 657
49.4.5 克隆從庫 659
第50章 MYSQL主流備份工具之MYDUMPER詳解 662
50.1 簡介 662
50.2 原理 662
50.3 命令行選項 664
50.3.1 MYDUMPER 664
50.3.2 MYLOADER 666
50.4 實戰演示 667
50.4.1 安裝MYDUMPER 667
50.4.2 備份與恢復 669
第51章 MYSQL主流閃回工具詳解 675
51.1 閃回工具科普 675
51.2 BINLOG2SQL 676
51.2.1 安裝和使用要求 676
51.2.2 命令行選項 677
51.2.3 實戰演示 678
51.2.4 使用限制與注意事項 690
51.3 MYFLASH 690
51.3.1 安裝MYFLASH 691
51.3.2 命令行選項 691
51.3.3 實戰演示 692,
基 礎 篇
第1章 MYSQL初始化安裝、簡單安全加固 3
1.1 背景 3
1.2 初始化安裝 3
1.2.1 下載二進制安裝檔案 3
1.2.2 創建MYSQL用戶 3
1.2.3 創建程式、數據存放 4
1.2.4 解壓縮二進制安裝檔案並設定許可權 4
1.2.5 軟連結程式路徑,並設定MYSQL命令環境變數 5
1.2.6 配置MY.CNF檔案參數 5
1.2.7 初始化MYSQL 6
1.2.8 啟動MYSQL 7
1.3 簡單安全加固 8
1.3.1 登錄MYSQL 8
1.3.2 刪除非ROOT或非LOCALHOST的用戶並修改ROOT密碼 9
1.3.3 刪除TEST庫,清理MYSQL.DB表 10
1.4 創建用戶、庫、表、數據 12
1.4.1 創建管理用戶並授權 12
1.4.2 創建庫、表、程式賬號 13
1.4.3 插入數據 14
1.5 MYSQL參數模板 16
第2章 MYSQL常用的兩種升級方法 21
2.1 背景 21
2.2 MYSQL 5.5.54的安裝 21
2.3 升級MYSQL 5.5.54到MYSQL 5.6.35 21
2.3.1 使用MYSQL_UPGRADE直接升級數據字典庫 21
2.3.2 使用MYSQLDUMP邏輯備份數據 30
2.4 升級注意事項 38
第3章 MYSQL體系結構 41
3.1 快速安裝MYSQL 41
3.2 數據結構 43
3.3 MYSQL SERVER體系結構 46
3.4 MYSQL中的存儲引擎 48
3.5 INNODB存儲引擎體系結構 48
3.6 INNODB存儲引擎後台執行緒 52
3.7 MYSQL前台執行緒 54
第4章 PERFORMANCE_SCHEMA初相識 56
4.1 什麼是PERFORMANCE_SCHEMA 56
4.2 PERFORMANCE_SCHEMA使用快速入門 57
4.2.1 檢查當前資料庫版本是否支持 57
4.2.2 啟用PERFORMANCE_SCHEMA 58
4.2.3 PERFORMANCE_SCHEMA表的分類 59
4.2.4 PERFORMANCE_SCHEMA簡單配置與使用 62
第5章 PERFORMANCE_SCHEMA配置詳解 66
5.1 編譯時配置 66
5.2 啟動時配置 67
5.2.1 啟動選項 67
5.2.2 SYSTEM VARIABLES 69
5.3 運行時配置 71
5.3.1 PERFORMANCE_TIMERS表 71
5.3.2 SETUP_TIMERS表 72
5.3.3 SETUP_CONSUMERS表 73
5.3.4 SETUP_INSTRUMENTS表 76
5.3.5 SETUP_ACTORS表 82
5.3.6 SETUP_OBJECTS表 85
5.3.7 THREADS表 87
第6章 PERFORMANCE_SCHEMA套用示例薈萃 93
6.1 利用等待事件排查MYSQL性能問題 93
6.2 鎖問題排查 97
6.2.1 找出誰持有全局讀鎖 97
6.2.2 找出誰持有MDL鎖 100
6.2.3 找出誰持有表級鎖 104
6.2.4 找出誰持有行級鎖 107
6.3 查看最近的SQL語句執行信息 112
6.3.1 查看最近的TOP SQL語句 112
6.3.2 查看最近執行失敗的SQL語句 114
6.4 查看SQL語句執行階段和進度信息 117
6.4.1 查看SQL語句執行階段信息 117
6.4.2 查看SQL語句執行進度信息 120
6.5 查看最近的事務執行信息 121
6.6 查看多執行緒複製報錯詳情 123
第7章 SYS系統庫初相識 126
7.1 SYS系統庫使用基礎環境 126
7.2 SYS系統庫初體驗 127
7.3 SYS系統庫的進度報告功能 129
第8章 SYS系統庫配置表 132
8.1 SYS_CONFIG表 132
8.2 SYS_CONFIG_INSERT_SET_USER觸發器 136
8.3 SYS_CONFIG_UPDATE_SET_USER觸發器 136
第9章 SYS系統庫套用示例薈萃 138
9.1 查看慢SQL語句慢在哪裡 138
9.2 查看是否有事務鎖等待 140
9.3 查看是否有MDL鎖等待 141
9.4 查看INNODB緩衝池中的熱點數據有哪些 143
9.5 查看冗餘索引 144
9.6 查看未使用的索引 145
9.7 查詢表的增、刪、改、查數據量和I/O耗時統計信息 145
9.8 查看MYSQL磁碟檔案產生的磁碟流量與讀寫比例 146
9.9 查看哪些語句使用了全表掃描 147
9.10 查看哪些語句使用了檔案排序 148
9.11 查看哪些語句使用了臨時表 149
第10章 INFORMATION_SCHEMA初相識 151
10.1 什麼是INFORMATION_SCHEMA 151
10.2 INFORMATION_SCHEMA組成對象 153
10.2.1 SERVER層的統計信息字典表 153
10.2.2 SERVER層的表級別對象字典表 154
10.2.3 SERVER層的混雜信息字典表 155
10.2.4 INNODB層的系統字典表 156
10.2.5 INNODB層的鎖、事務、統計信息字典表 157
10.2.6 INNODB層的全文索引字典表 158
10.2.7 INNODB層的壓縮相關字典表 160
第11章 INFORMATION_SCHEMA套用示例薈萃 161
11.1 使用SERVER層的字典表查詢相關的元數據信息 161
11.1.1 查看資料庫中是否使用了外鍵 161
11.1.2 查看INNODB表空間檔案信息 162
11.1.3 查看索引的統計信息 165
11.1.4 查看錶的欄位相關信息 166
11.1.5 查看資料庫中是否使用了存儲程式 167
11.1.6 查看資料庫中的分區表信息 168
11.1.7 查看資料庫中的觸發器 169
11.1.8 查看資料庫中的計畫任務 170
11.1.9 查看客戶端會話的狀態信息 172
11.2 使用INNODB層的字典表查詢相關的元數據信息 173
11.2.1 查看索引列的信息 173
11.2.2 查看錶的欄位相關信息 175
11.2.3 查看事務鎖等待信息 176
11.2.4 查看INNODB緩衝池中的熱點數據有哪些 176
第12章 MYSQL系統庫之許可權系統表 177
12.1 USER 177
12.2 DB 179
12.3 TABLES_PRIV 180
12.4 COLUMNS_PRIV 181
12.5 PROCS_PRIV 182
12.6 PROXIES_PRIV 182
第13章 MYSQL系統庫之訪問許可權控制系統 184
13.1 訪問許可權控制系統概述 184
13.2 MYSQL提供了哪些許可權 185
13.3 MYSQL賬號命名規則 191
13.4 MYSQL賬號訪問控制兩階段 192
13.4.1 第一階段(賬號和密碼認證) 192
13.4.2 第二階段(許可權檢查) 196
13.5 許可權變更的影響 197
13.6 MYSQL常見連線問題 198
第14章 MYSQL系統庫之統計信息表 200
14.1 統計信息概述 200
14.2 統計信息表詳解 203
14.2.1 INNODB_TABLE_STATS 203
14.2.2 INNODB_INDEX_STATS 204
第15章 MYSQL系統庫之複製信息表 206
15.1 複製信息表概述 206
15.2 複製信息表詳解 207
15.2.1 SLAVE_MASTER_INFO 207
15.2.2 SLAVE_RELAY_LOG_INFO 209
15.2.3 SLAVE_WORKER_INFO 211
15.2.4 GTID_EXECUTED 215
15.2.5 NDB_BINLOG_INDEX 217
第16章 MYSQL系統庫之日誌記錄表 218
16.1 日誌信息概述 218
16.2 日誌表詳解 220
16.2.1 GENERAL_LOG 220
16.2.2 SLOW_LOG 223
第17章 MYSQL系統庫套用示例薈萃 228
17.1 查看用戶不同作用域的許可權 228
17.1.1 查看全局許可權 228
17.1.2 查看庫級別許可權 230
17.1.3 查看錶級別許可權 232
17.1.4 查看欄位級別許可權 234
17.2 查看統計信息 236
17.2.1 查看錶統計信息 236
17.2.2 查看索引統計信息 236
17.3 查看SQL日誌信息 237
第18章 複製技術的演進 245
18.1 複製格式概述 245
18.2 基於數據安全的複製技術演進 246
18.2.1 異步複製 246
18.2.2 半同步複製 247
18.2.3 增強半同步複製 249
18.2.4 組複製 250
18.2.5 GTID複製 253
18.3 基於複製效率的複製技術演進 255
18.3.1 單執行緒複製 255
18.3.2 DATABASE 並行複製 256
18.3.3 LOGICAL_CLOCK 並行複製 258
18.3.4 WRITESET並行複製 260
第19章 事務概念基礎 263
19.1 4種事務隔離級別和3種異常現象 263
19.1.1 標準的事務隔離級別 263
19.1.2 調整事務隔離級別 264
19.2 從事務提交談起 265
19.2.1 事務管理 265
19.2.2 資料庫中的檔案 266
19.2.3 WAL日誌先寫 266
19.3 MYSQL中的REDO日誌 267
19.3.1 REDO日誌落盤時間點 267
19.3.2 REDO日誌格式 267
19.3.3 相關參數及概念 269
19.3.4 CHECKPOINT概念 269
19.3.5 REDO日誌的設定 271
19.3.6 REDO日誌與BINLOG協調工作 273
19.4 MVCC介紹 274
19.4.1 MVCC原理 274
19.4.2 具體代碼 276
第20章 INNODB鎖 280
20.1 INNODB鎖概述 280
20.1.1 INNODB鎖分類 280
20.1.2 行鎖 280
20.1.3 表鎖 281
20.1.4 鎖模式對應的含義 282
20.2 加鎖驗證 282
20.2.1 REPEATABLE-READ隔離級別+表無顯式主鍵和索引 283
20.2.2 REPEATABLE-READ隔離級別+表有顯式主鍵但無索引 286
20.2.3 REPEATABLE-READ隔離級別+表無顯式主鍵但有索引 288
20.2.4 REPEATABLE-READ隔離級別+表有顯示主鍵和索引 291
20.2.5 READ-COMMITTED隔離級別+表無顯式主鍵和索引 293
20.2.6 READ-COMMITTED隔離級別+表有顯式主鍵無索引 295
20.2.7 READ-COMMITTED隔離級別+表無顯式主鍵有索引 295
20.2.8 READ-COMMITTED隔離級別+表有顯式主鍵和索引 296
第21章 SQL最佳化 299
21.1 SQL最佳化基礎概念 299
21.2 MYSQL中的JOIN算法 303
21.3 MYSQL中的最佳化特性 305
第22章 MYSQL讀寫擴展 308
22.1 分散式架構概述 308
22.2 分庫分表兩種方式 309
22.2.1 中間件方式 309
22.2.2 客戶端方式 309
22.2.3 客戶端方式與中間件方式不同 310
22.2.4 分庫與分表 310
22.3 中間件工作方式及原理 310
22.4 架構設計及業務場景 312
22.4.1 讀寫擴展案例 312
22.5 關於中間件的一些限制解釋 314
22.5.1 跨庫查詢、複雜的SQL語句支持 314
22.5.2 分散式事務 314
案 例 篇
第23章 性能測試指標和相關術語 317
23.1 測試目標分類 317
23.1.1 已知故障信息採集 317
23.1.2 預估壓力評測 317
23.2 性能測試指標 318
23.2.1 資料庫性能通用“切口” 318
23.2.2 測試通用術語 319
23.2.3 示例 320
23.3 本章小結 321
第24章 歷史問題診斷和現場故障分析 322
24.1 故障分析和驗證 322
24.1.1 歷史問題排查 322
24.1.2 線上問題分析 323
24.2 故障復現排查 323
24.3 本章小結 325
第25章 性能調優金字塔 326
25.1 硬體和系統調優 327
25.1.1 硬體最佳化 327
25.1.2 系統最佳化 327
25.2 MYSQL調優 328
25.2.1 參數調優 328
25.2.2 SQL/索引調優 329
25.3 架構調優 329
25.4 本章小結 329
第26章 SQL語句執行慢真假難辨 330
26.1 概述 330
26.2 測試環境 331
26.3 採集數據包 331
26.3.1 採集套用伺服器數據包 331
26.3.2 採集資料庫伺服器數據包 332
26.4 解析數據包 333
26.4.1 使用WIRESHARK解析數據包 333
26.4.2 使用TCPDUMP解析數據包 335
26.5 本章小結 337
第27章 如何避免三天兩頭換硬碟、記憶體、主機板 338
27.1 概述 338
27.2 伺服器標準化 338
27.3 上線前烤機 339
27.3.1 STRESS 339
27.3.2 FIO 341
27.3.3 資料庫烤機 341
27.4 本章小結 341
第28章 每隔45天的MYSQL性能低谷 342
28.1 存儲知識小普及 342
28.1.1 MYSQL存儲系統要求 342
28.1.2 存儲系統軟體層 343
28.1.3 存儲系統硬體層 343
28.2 每隔45天的性能抖動 344
28.3 影響I/O性能的三種RAID策略 348
28.3.1 電池充放電 348
28.3.2 巡讀 354
28.3.3 一致性檢查 356
28.4 本章小結 358
第29章 MYSQL連線無法自動釋放 359
29.1 環境配置 359
29.2 問題現象 359
29.3 診斷分析 359
29.4 解決方案 362
29.5 本章小結 362
第30章 查詢MYSQL偶爾比較慢 363
30.1 環境配置 363
30.2 問題現象 363
30.3 診斷分析 363
30.4 選擇VIP還是DNS訪問MYSQL 364
30.4.1 VIP之殤 364
30.4.2 DNS之痛 365
30.4.3 VIP切換還是DNS切換 365
30.5 CPU節能模式 365
30.6 本章小結 366
第31章 MYSQL最多只允許214個連線 367
31.1 環境配置 367
31.2 故障現象 367
31.3 故障分析 367
31.4 解決方案 370
31.5 MYSQL最大連線數為214的源碼解析 370
31.6 LINUX資源限制 371
31.6.1 資源拆分和組合 371
31.6.2 進程資源限制 372
31.6.3 MYSQL內部資源限制 374
31.7 本章小結 374
第32章 MYSQL掛起診斷思路 375
32.1 環境配置 375
32.2 問題現象 375
32.3 診斷分析 376
32.4 掛起時先做什麼 377
32.5 總結 377
第33章 硬體和系統調優 378
33.1 硬體和系統調優概覽 378
33.1.1 I/O:MYSQL 80%的性能瓶頸所在 378
33.2 CPU 384
33.3 網路 384
33.4 其他 385
33.5 總結 386
第34章 並發刪除數據造成死鎖 387
34.1 現象描述 387
34.2 如何閱讀死鎖日誌 388
34.3 表結構及操作步驟 390
34.4 總結 390
第35章 刪除不存在的數據造成死鎖 391
35.1 現象描述 391
35.2 問題分析 392
35.3 問題擴展 392
35.4 表結構及操作步驟 393
35.5 總結 393
第36章 插入意向鎖死鎖 394
36.1 現象描述 394
36.2 問題分析 395
36.3 總結 397
第37章 分頁查詢最佳化 398
37.1 現象描述 398
37.2 最佳化方案 398
第38章 子查詢最佳化——子查詢轉換為連線 400
38.1 現象描述 400
38.2 最佳化方案 401
第39章 子查詢最佳化——使用DELETE刪除數據 403
39.1 現象描述 403
39.2 最佳化方案 403
工 具 篇
第40章 硬體規格常用查看命令詳解 407
40.1 通用命令 407
40.1.1 LSHW 407
40.1.2 DMIDECODE 414
40.1.3 DMESG 419
40.2 CPU相關命令 420
40.3 磁碟相關命令 422
40.3.1 SMARTCTL 422
40.3.2 LSSCSI 424
40.4 網卡相關命令 426
40.4.1 LSPCI 426
40.4.2 ETHTOOL 428
40.5 HCA卡相關命令 430
第41章 系統負載常用查看命令詳解 433
41.1 TOP 433
41.1.1 命令行選項 433
41.1.2 互動式命令選項 434
41.1.3 輸出結果解讀 434
41.2 DSTAT 436
41.2.1 命令行選項 436
41.2.2 輸出結果解讀 438
41.3 MPSTAT 442
41.3.1 命令行選項 443
41.3.2 輸出結果解讀 443
41.4 SAR 444
41.4.1 命令行選項 444
41.4.2 輸出結果解讀 446
41.5 VMSTAT 453
41.5.1 命令行選項 453
41.5.2 輸出結果解讀 453
41.6 IOSTAT 455
41.6.1 命令行選項 455
41.6.2 輸出結果解釋 456
41.7 FREE 458
41.7.1 命令行選項 459
41.7.2 輸出結果解讀 459
41.8 IOTOP 460
41.8.1 命令行選項 461
41.8.2 互動式命令選項 461
41.8.3 輸出結果解讀 461
41.9 IFTOP 463
41.9.1 命令行選項 463
41.9.2 互動式命令選項 463
41.9.3 輸出結果解讀 464
41.10 IPERF 465
41.10.1 命令行選項 466
41.10.2 輸出結果解讀 467
第42章 FIO存儲性能壓測 469
42.1 安裝FIO 469
42.2 測試I/O性能 470
42.2.1 隨機寫 470
42.2.2 順序寫 470
42.2.3 隨機讀 471
42.2.4 順序讀 471
42.2.5 混合隨機讀寫 471
42.2.6 FIO配置檔案測試 471
42.3 參數和結果詳解 472
42.3.1 關鍵參數解釋 472
42.3.2 配置檔案 473
42.3.3 結果解析 475
42.4 FIO測試建議 476
42.5 課外閱讀 476
第43章 HAMMERDB線上事務處理測試 477
43.1 安裝和配置HAMMERDB 477
43.1.1 下載安裝包 477
43.1.2 安裝HAMMERDB 477
43.1.3 安裝HAMMERDB GUI依賴包 478
43.2 測試 481
43.3 課外閱讀 492
第44章 SYSBENCH資料庫壓測工具 493
44.1 安裝SYSBENCH 493
44.1.1 YUM安裝 493
44.1.2 RPM包安裝 493
44.1.3 編譯安裝 494
44.1.4 驗證安裝是否成功 494
44.2 測試案例 494
44.2.1 造數 495
44.2.2 資料庫讀寫測試 495
44.2.3 清理 496
44.3 SYSBENCH 參數詳解 496
44.3.1 SYSBENCH命令語法 496
44.3.2 OPTIONS 496
44.3.3 TESTNAME 500
44.3.4 COMMAND 502
44.4 資料庫測試輸出信息詳解 502
44.4.1 輸出結果概述 503
44.4.2 版本及關鍵測試參數輸出 504
44.4.3 中間統計結果輸出 504
44.4.4 整體統計結果輸出 504
44.5 課外閱讀 505
第45章 MYSQLADMIN和INNOTOP工具詳解 506
45.1 MYSQLADMIN 506
45.1.1 命令行選項 506
45.1.2 實戰演示 511
45.2 INNOTOP 513
45.2.1 安裝INNOTOP 513
45.2.2 命令行選項 514
45.2.3 互動式選項 515
45.2.4 實戰演示 516
第46章 利用PROMETHEUS+GRAFANA 搭建炫酷的MYSQL監控平台 524
46.1 安裝PROMETHEUS 525
46.1.1 下載程式包 525
46.1.2 解壓縮程式包 526
46.1.3 啟動PROMETHEUS 527
46.2 安裝GRAFANA 529
46.2.1 下載程式包 529
46.2.2 解壓縮程式包 530
46.2.3 啟動GRAFANA 530
46.2.4 在GRAFANA中導入GRAFANA-DASHBOARDS 531
46.3 監控節點部署 534
46.3.1 添加主機監控 534
46.3.2 添加MYSQL監控 535
46.3.3 監控DASHBOARD切換 536
第47章 PERCONA TOOLKIT常用工具詳解 538
47.1 PT-QUERY-DIGEST 538
47.1.1 命令行選項 538
47.1.2 實戰演示 550
47.2 PT-IOPROFILE 558
47.2.1 命令行選項 558
47.2.2 實戰演示 559
47.3 PT-INDEX-USAGE 560
47.3.1 命令行選項 561
47.3.2 實戰演示 563
47.4 PT-DUPLICATE-KEY-CHECKER 566
47.4.1 命令行選項 567
47.4.2 實戰演示 568
47.5 PT-MYSQL-SUMMARY/PT-SUMMARY 571
47.5.1 PT-MYSQL-SUMMARY 571
47.5.2 PT-SUMMARY 578
47.6 PT-PMP 584
47.6.1 命令行選項 585
47.6.2 實戰演示 585
47.7 PT-STALK 587
47.7.1 命令行選項 588
47.7.2 實戰演示 591
47.8 PT-SIFT 594
47.8.1 命令行選項 595
47.8.2 實戰演示 595
第48章 MYSQL主流備份工具之MYSQLDUMP詳解 598
48.1 簡介 598
48.2 原理 599
48.3 命令行選項 601
48.3.1 連線選項 601
48.3.2 檔案選項 602
48.3.3 DDL選項 603
48.3.4 調試選項 604
48.3.5 幫助選項 604
48.3.6 國際化選項——與字元集相關的選項 604
48.3.7 複製選項 605
48.3.8 輸出格式化選項 607
48.3.9 過濾選項 609
48.3.10 性能選項 612
48.3.11 事務選項 612
48.3.12 組合選項 614
48.4 實戰演示 614
48.4.1 完全備份與恢復 614
48.4.2 增量備份與恢復 616
48.4.3 搭建主從複製架構 616
48.4.4 克隆從庫 618
48.4.5 指定庫表備份與恢復 619
48.4.6 純文本備份與恢復 621
第49章 MYSQL主流備份工具之XTRABACKUP詳解 624
49.1 簡介 624
49.2 原理 624
49.3 命令行選項 633
49.4 實戰演示 644
49.4.1 完全備份與恢復 644
49.4.2 增量備份與恢復 645
49.4.3 基於時間點的恢復 649
49.4.4 搭建主從複製架構 657
49.4.5 克隆從庫 659
第50章 MYSQL主流備份工具之MYDUMPER詳解 662
50.1 簡介 662
50.2 原理 662
50.3 命令行選項 664
50.3.1 MYDUMPER 664
50.3.2 MYLOADER 666
50.4 實戰演示 667
50.4.1 安裝MYDUMPER 667
50.4.2 備份與恢復 669
第51章 MYSQL主流閃回工具詳解 675
51.1 閃回工具科普 675
51.2 BINLOG2SQL 676
51.2.1 安裝和使用要求 676
51.2.2 命令行選項 677
51.2.3 實戰演示 678
51.2.4 使用限制與注意事項 690
51.3 MYFLASH 690
51.3.1 安裝MYFLASH 691
51.3.2 命令行選項 691
51.3.3 實戰演示 692