MySQL 故障排除與效能調校完全攻略 (上)
內容描述
本書一共分為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 等監控工具。
--------------------------------------------------------------------------------
效能問題:
本書解決 MySQL 資料庫效能問題,某種程度來說,MySQL 資料庫效能最佳化問題是一個平行處理的問題,歸根究柢是鎖和資源爭用的問題。
其實效能最佳化要做的就是下列事情:
•瞭解基本原理。找到事情的因果關係和依賴關係,儘量讓不相關的事情能平行進行。
•要事第一。找到目前最重要、最需要最佳化的地方,投入時間和精力,不斷去改進與最佳化。
•切中要害。找到耗費時間最長的地方,想盡辦法縮短其時間。
機械思維和大數據思維:
本書的效能最佳化方法論還是工業革命時代的機械思維,簡而言之,就是尋找因果關係,大膽假設,小心求證。現在已經是資訊時代,理應瞭解什麼是資訊理論,解決問題需要利用大數據思維!
讀者對象:
(1)MySQL 初學者。
(2)專門從事 MySQL 工作1~3年的開發人員和運維人員。
(3)資深的 MySQL DBA。
目錄大綱
基礎篇
第 1 章 MySQL 初始化安裝、簡單安全加固
1.1 背景
1.2 初始化安裝
1.2.1 下載二進位安裝檔
1.2.2 建立 mysql 使用者
1.2.3 建立程式、資料存放目錄
1.2.4 解壓縮二進位檔案並設定目錄權限
1.2.5 軟連結程式路徑,並設定 MySQL 命令環境變數
1.2.6 設定 my.cnf 檔案參數
1.2.7 初始化 MySQL
1.2.8 啟動 MySQL
1.3 簡單安全加固
1.3.1 登錄 MySQL
1.3.2 刪除非 root 或非 localhost 的使用者,並修改 root 密碼
1.3.3 刪除 test 資料庫,清理 mysql.db 資料表
1.4 建立使用者、資料庫、資料表與資料
1.4.1 建立管理者與授權
1.4.2 建立資料庫、資料表、程式帳號
1.4.3 插入資料
1.5 MySQL 參數範本
第 2 章 MySQL 常用的兩種升級方法
2.1 背景
2.2 MySQL 5.5.54 的安裝
2.3 升級 MySQL 5.5.54 到 MySQL 5.6.35
2.3.1 使用 mysql_upgrade 直接升級資料字典庫
2.3.2 使用 mysqldump 邏輯備份資料
2.4 升級注意事項
第 3 章 MySQL 架構
3.1 快速安裝 MySQL
3.2 資料目錄結構
3.3 MySQL Server 架構
3.4 MySQL 中的儲存引擎
3.5 InnoDB 儲存引擎架構
3.6 InnoDB 儲存引擎後台執行緒
3.7 MySQL 前台執行緒
第 4 章 performance_schema 初相識
4.1 什麼是 performance_schema
4.2 performance_schema 快速使用入門
4.2.1 檢查目前資料庫版本是否支援
4.2.2 啟用 performance_schema
4.2.3 performance_schema 資料表的分類
4.2.4 performance_schema 簡單設定與使用
第 5 章 performance_schema 組態詳解
5.1 編譯時組態
5.2 啟動時組態
5.2.1 啟動選項
5.2.2 system variables
5.3 執行時期組態
5.3.1 performance_timers 資料表
5.3.2 setup_consumers 資料表
5.3.3 setup_instruments 資料表
5.3.4 setup_actors 資料表
5.3.5 setup_objects 資料表
5.3.6 threads 資料表
第 6 章 performance_schema 應用範例薈萃
6.1 利用等待事件排查 MySQL 效能問題
6.2 鎖問題排查
6.2.1 找出誰持有全域讀鎖
6.2.2 找出誰持有 MDL 鎖
6.2.3 找出誰持有表級鎖
6.2.4 找出誰持有列級鎖
6.3 查看最近的 SQL 語句執行資訊
6.3.1 查看最近的 TOP SQL 語句
6.3.2 查看最近執行失敗的 SQL 語句
6.4 查看 SQL 語句執行階段和進度資訊
6.4.1 查看 SQL 語句執行階段資訊
6.4.2 查看 SQL 語句執行進度資訊
6.5 查看最近的交易執行資訊
6.6 查看多執行緒複製報錯細節
第 7 章 sys 系統資料庫初相識
7.1 sys 系統資料庫使用基礎環境
7.2 sys 系統資料庫初體驗
7.3 sys 系統資料庫的進度報告功能
第 8 章 sys 系統資料庫組態表
8.1 sys_config 資料表
8.2 sys_config_insert_set_user 觸發器
8.3 sys_config_update_set_user 觸發器
第 9 章 sys 系統資料庫應用範例薈萃
9.1 查看 SQL 語句慢在哪裡
9.2 查看是否有交易鎖等待
9.3 查看是否有 MDL 鎖等待
9.4 查看 InnoDB 緩衝池的熱點資料
9.5 查看冗餘索引
9.6 查看未使用的索引
9.7 查詢資料表的增、刪、改、查資料量,以及 I/O 耗時統計資訊
9.8 查看 MySQL 檔案產生的磁碟流量與讀寫比例
9.9 查看哪些語句使用全資料表掃描
9.10 查看哪些語句使用檔案排序
9.11 查看哪些語句使用臨時資料表
第 10 章 information_schema 初相識
10.1 什麼是 information_schema
10.2 information_schema 組成物件
10.2.1 Server 層的統計資訊字典表
10.2.2 Server 層的資料表等級物件字典表
10.2.3 Server 層的混合資訊字典表
10.2.4 InnoDB 層的系統字典表
10.2.5 InnoDB 層的鎖、交易、統計資訊字典表
10.2.6 InnoDB 層的全文索引字典表
10.2.7 InnoDB 層的壓縮相關字典表
第 11 章 information_schema 應用範例薈萃
11.1 使用 Server 層的字典表查詢相關的中繼資料
11.1.1 查看資料庫是否使用外鍵
11.1.2 查看 InnoDB 資料表空間檔案資訊
11.1.3 查看索引的統計資訊
11.1.4 查看資料表的欄位相關資訊
11.1.5 查看資料庫是否使用預存程序
11.1.6 查看資料庫的分區表資訊
11.1.7 查看資料庫的觸發器
11.1.8 查看資料庫的計畫任務
11.1.9 查看用戶端工作階段的狀態資訊
11.2 使用 InnoDB 層的字典表查詢相關的中繼資料
11.2.1 查看索引行的資訊
11.2.2 查看資料表的欄位相關資訊
11.2.3 查看交易鎖等待資訊
11.2.4 查看 InnoDB 緩衝池的熱點資料
第 12 章 mysql 系統資料庫的權限系統表
12.1 user
12.2 db
12.3 tables_priv
12.4 columns_priv
12.5 procs_priv
12.6 proxies_priv
第 13 章 mysql 系統資料庫之存取權限控制系統
13.1 存取權限控制系統概述
13.2 MySQL 提供哪些權限
13.3 MySQL 帳號命名規則
13.4 MySQL 帳號存取控制兩階段
13.4.1 第一階段(帳號和密碼認證)
13.4.2 第二階段(權限檢查)
13.5 權限變更的影響
13.6 MySQL 常見連接問題
第 14 章 mysql 系統資料庫之統計資訊表
14.1 統計資訊概述
14.2 統計資訊表詳解
14.2.1 innodb_table_stats
14.2.2 innodb_index_stats
第 15 章 mysql 系統資料庫之複製資訊表
15.1 複製資訊表概述
15.2 複製資訊表詳解
15.2.1 slave_master_info
15.2.2 slave_relay_log_info
15.2.3 slave_worker_info
15.2.4 gtid_executed
15.2.5 ndb_binlog_index
第 16 章 mysql 系統資料庫之日誌記錄表
16.1 日誌資訊概述
16.2 日誌表詳解
16.2.1 general_log
16.2.2 slow_log
第 17 章 mysql 系統資料庫應用範例薈萃
17.1 查看使用者不同作用域的權限
17.1.1 查看全域權限
17.1.2 查看資料庫權限等級
17.1.3 查看資料表權限等級
17.1.4 查看欄位權限等級
17.2 查看統計資訊
17.2.1 查看資料表統計資訊
17.2.2 查看索引統計資訊
17.3 查看 SQL 日誌資訊
第 18 章 複製技術的演進
18.1 複製格式概述
18.2 根據資料安全的複製技術演進
18.2.1 非同步複製
18.2.2 半同步複製
18.2.3 增強半同步複製
18.2.4 群組複製
18.2.5 GTID 複製
18.3 根據複製效率的複製技術演進
18.3.1 單執行緒複製
18.3.2 DATABASE 平行複製
18.3.3 LOGICAL_CLOCK 平行複製
18.3.4 WRITESET 平行複製
第 19 章 交易概念基礎
19.1 4種交易隔離等級和3種異常現象
19.1.1 標準的交易隔離等級
19.1.2 調整交易隔離等級
19.2 從交易提交談起
19.2.1 交易管理
19.2.2 資料庫的檔案
19.2.3 WAL日誌先寫
19.3 MySQL 的 Redo 日誌
19.3.1 Redo 日誌寫入磁碟時間點
19.3.2 Redo 日誌格式
19.3.3 相關參數及概念
19.3.4 CheckPoint 概念
19.3.5 Redo 日誌的設定
19.3.6 Redo 日誌與 Binlog 協調運作
19.4 MVCC 介紹
19.4.1 MVCC 原理
19.4.2 具體程式碼
第 20 章 InnoDB 鎖
20.1 InnoDB 鎖概述
20.1.1 InnoDB 鎖分類
20.1.2 列級鎖
20.1.3 表級鎖
20.1.4 鎖模式對應的涵義
20.2 加鎖驗證
20.2.1 REPEATABLE-READ 隔離等級 + 資料表無顯式主鍵和索引
20.2.2 REPEATABLE-READ 隔離等級 + 資料表有顯式主鍵無索引
20.2.3 REPEATABLE-READ 隔離等級 + 資料表無顯式主鍵有索引
20.2.4 REPEATABLE-READ 隔離等級 + 資料表有顯式主鍵和索引
20.2.5 READ-COMMITTED 隔離等級 + 資料表無顯式主鍵和索引
20.2.6 READ-COMMITTED 隔離等級 + 資料表有顯式主鍵無索引
20.2.7 READ-COMMITTED 隔離等級 + 資料表無顯式主鍵有索引
20.2.8 READ-COMMITTED 隔離等級 + 資料表有顯式主鍵和索引
第 21 章 SQL 最佳化
21.1 SQL 最佳化基礎概念
21.2 MySQL 的 Join 演算法
21.3 MySQL 的最佳化特性
第 22 章 MySQL 讀寫擴充
22.1 分散式架構概述
22.2 分庫分表兩種方式
22.2.1 中介軟體方式
22.2.2 用戶端方式
22.2.3 用戶端方式與中介軟體方式不同
22.2.4 分庫與分表
22.3 中介軟體運作方式及原理
22.4 架構設計及業務場景
22.5 關於中介軟體的一些限制
22.5.1 跨資料庫查詢、複雜的 SQL 語句支援
22.5.2 分散式交易
作者介紹
李春
原阿里巴巴 MySQL DBA 團隊技術 Leader,全程參與阿里資料庫架構從 Oracle 遷移到 MySQL 的過程,參與分散式中介軟體 Cobar 設計。現為沃趣科技聯合創始人&首席架構師,負責 MySQL、基礎軟體及部分關鍵組件的技術選型、風險評估等。
羅小波
沃趣科技高級資料庫工程師,主要負責 MySQL 產品的資料庫支撐與售後二線支撐。曾參與版本發布系統、輕量級監控系統、運維管理平台、資料庫管理平台的設計與編寫,熟悉 MySQL 體系結構,Innodb 儲存引擎,喜好專研開源技術,多次在公開場合做過線下線上資料庫專題分享,發表過多篇與資料庫相關的研究文章。
董紅禹
沃趣科技 MySQL DBA,為多家大型企業進行過故障解決、架構設計、效能最佳化,例如中信證券、浙江農信、陝西農信、郵儲銀行等。規劃並實施了浙江農信互聯網核心金融平台。