內容簡介
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。
內容簡介
本書一共分為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。
作者簡介
作者簡介
李春
原阿里巴巴 MySQL DBA 團隊技術 Leader,全程參與阿里資料庫架構從 Oracle 遷移到 MySQL 的過程,參與分散式中介軟體 Cobar 設計。現為沃趣科技聯合創始人&首席架構師,負責 MySQL、基礎軟體及部分關鍵組件的技術選型、風險評估等。
羅小波
沃趣科技高級資料庫工程師,主要負責 MySQL 產品的資料庫支撐與售後二線支撐。曾參與版本發布系統、輕量級監控系統、運維管理平台、資料庫管理平台的設計與編寫,熟悉 MySQL 體系結構,Innodb 存儲引擎,喜好專研開源技術,多次在公開場合做過線下線上資料庫專題分享,發表過多篇與資料庫相關的研究文章。
董紅禹
沃趣科技 MySQL DBA,為多家大型企業進行過故障解決、架構設計、效能最佳化,例如中信證券、浙江農信、陝西農信、郵儲銀行等。規劃並實施了浙江農信互聯網核心金融平台。
李春
原阿里巴巴 MySQL DBA 團隊技術 Leader,全程參與阿里資料庫架構從 Oracle 遷移到 MySQL 的過程,參與分散式中介軟體 Cobar 設計。現為沃趣科技聯合創始人&首席架構師,負責 MySQL、基礎軟體及部分關鍵組件的技術選型、風險評估等。
羅小波
沃趣科技高級資料庫工程師,主要負責 MySQL 產品的資料庫支撐與售後二線支撐。曾參與版本發布系統、輕量級監控系統、運維管理平台、資料庫管理平台的設計與編寫,熟悉 MySQL 體系結構,Innodb 存儲引擎,喜好專研開源技術,多次在公開場合做過線下線上資料庫專題分享,發表過多篇與資料庫相關的研究文章。
董紅禹
沃趣科技 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 查看使用者不同
基礎篇
第 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 查看使用者不同