內容提要
《MySQL運維內參:MySQL、Galera、Inception核心原理與最佳實踐》是一本介紹MySQL資料庫知識的專業書籍,從核心原理到最佳實踐,深入淺出、抽絲剝繭地進行講解,不僅從源碼和運維兩個角度介紹了MySQL大部分重要概念和運維要點,還講述了MySQL極為優秀的集群組件Galera的實現原理和運維經驗,同時,也介紹了作者獨立開發的MySQL審核系統Inception的設計、實現與功能。
《MySQL運維內參:MySQL、Galera、Inception核心原理與最佳實踐》也得到了MySQL官方研發團隊的大力支持,兩位資深專家分別介紹了MySQL最新的支持NoSQL的組件MySQL Document Store,以及集群化組件MySQL Group Replication的實現原理和運維要點。
《MySQL運維內參:MySQL、Galera、Inception核心原理與最佳實踐》不僅可以作為技術管理者和架構師在設計MySQL相關套用和系統時的參考,還適合MySQL套用開發者更深入地了解和使用MySQL。最後,作為MySQL DBA的必備參考,希望《MySQL運維內參:MySQL、Galera、Inception核心原理與最佳實踐》能在實際工作中對讀者有所幫助。
目錄
第一部分 MySQL篇
1 MySQL原始碼入門
MySQL原始碼的組織結構
Linux下的編譯
安裝MySQL庫
MySQL 5.7許可權處理
2 MySQL啟動過程
3 連線的生命與使命
用戶連線執行緒創建
MySQL處理請求
總結
4 MySQL表對象快取
表結構的實現原理
涉及的參數變數
優缺點總結
存在的問題
5 InnoDB初探
InnoDB的原始碼目錄結構
InnoDB存儲引擎檔案組織
InnoDB體系結構
InnoDB存儲引擎啟動與關閉
- - InnoDB 存儲引擎的啟動
- - InnoDB存儲引擎的關閉
6 InnoDB數據字典
背景
系統表結構
字典表載入
Rowid管理
總結
7 InnoDB數據存儲結構
表空間檔案組成結構
- - 段
- - 簇
- - 頁面
段、簇、頁面組織結構
8 InnoDB索引實現原理
背景
B+樹及B樹的區別
索引的設計
聚簇索引和二級索引
二級索引指針
神奇的B+樹網路
InnoDB索引的插入過程
一個頁面至少要存儲幾條記錄
頁面結構管理
- - 檔案管理頭信息
- - 頁面頭信息
- - 最小記錄和最大記錄
- - 頁面數據空間管理
- - 經典的槽管理
- - 頁面尾部
- - 頁面重組
索引頁面的回收
9 InnoDB記錄格式
背景
從源碼入手了解行格式
總結
10 揭秘獨特的兩次寫
單一頁面刷盤
批量頁面刷盤
- - 兩次寫組織結構
- - 批量刷盤兩次寫實現原理
兩次寫的作用
發散思維
總結
11 InnoDB日誌管理機制
InnoDB Buffer Pool
REDO LOG日誌檔案管理的用途
MTR InnoDB物理事務
日誌的意義
日誌記錄格式
日誌刷盤時機
REDO日誌恢復
資料庫回滾
- - 資料庫UNDO段管理
- - 資料庫UNDO日誌記錄格式
- - 回滾時刻
總結
12 MySQL 5.7中嶄新的MySQL sys Schema
Performance Schema的改進
sys Schema介紹
- - sys Schema視圖摘要
- - sys Schema重點視圖與套用場景
- - 使用風險
總結
13 方便的MySQL GTID
GTID 相關概念
- - 什麼是GTID
- - GTID集合
- - GTID生命周期
GTID的維護
- - gtid_executed表
- - gtid_executed表壓縮
GTID搭建主從
- - 搭建主從時,需要注意的MySQL參數
- - 開啟GTID
- - 搭建主從
使用GTID案例總結
- - 如何跳過一個GTID
- - 利用GTID模式快速改變主從複製關係
- - 線上將傳統模式複製改為GTID模式複製
- - 線上將GTID模式複製改為傳統模式複製
GTID的限制
14 MySQL半同步複製
半同步特性
半同步主庫端
半同步從庫端
半同步實現
外掛程式安裝
半同步自動開關
15 MySQL 5.7多執行緒複製原理
背景
行之有效的延遲最佳化方法
MySQL 5.6的多執行緒複製
MySQL 5.7的多執行緒複製
- - ordered commit
- - 多執行緒複製分發原理
- - 異常故障恢復
16 大量MySQL表導致服務變慢的問題
背景
問題分析
案例解決
總結
17 MySQL快速刪除大表
背景
問題分析
案例解決
發散思維
總結
18 兩條不同的插入語句導致的死鎖
背景
問題分析
發散思維
總結
19 MySQL在並發刪除同一行數據時導致死鎖的分析
背景
問題分析
發散思維
總結
20 參數SQL_SLAVE_SKIP_COUNTER的奧秘
21 Binlog中的時間戳
背景
問題分析
發散思維
事務中的事件順序
問題延伸
show processlist中的Time
總結
22 InnoDB中Rowid對Binlog的影響
背景
問題分析
總結
23 MySQL備份:Percona XtraBackup的原理與實踐
備份背景及類型
認識Percona XtraBackup
XtraBackup的工作流程
XtraBackup的備份原理
XtraBackup 需要的許可權
innobackupex常用的備份選項說明
XtraBackup備份實踐
- - 全量備份
- - 增量備份
- - 並行備份
- - 其他備份
案例實踐與心得
建議與提醒
24 MySQL分庫分表
分庫分表的種類
分庫分表的原則
分庫分表實現
- - 資料庫層的實現
- - 業務層的實現
25 MySQL數據安全
單機安全
集群安全
備份安全
MySQL實例安全保證
- - Double Write
- - REDO LOG
MySQL集群安全保證
- - 傳統的主從模式如何保證資料庫安全
- - Semi_Sync Replication方式的複製
- - MySQL集群化如何保證資料庫安全
總結
26 MySQL 性能拾遺
適當的數據檔案大小
- - 碎片空洞問題
- - 設計問題
合理設計表結構
- - 冗餘存儲
- - 拆分存儲
- - 重複存儲
- - 特別提醒
正確使用索引
MySQL系統參數
記憶體和CPU
磁碟的革命
雲中漫步
總結
27 MySQL Group Replication
Group Replication概述
- - 組的概念
- - 多主複製
- - 單獨的通信機制
Group Replication服務模式
- - 單主模式
- - 多主模式
- - 服務模式的配置
Binlog Event的多執行緒執行
- - group_replication_applier通道
- - 基於主鍵的並行執行
搭建Group Replication複製環境
- - MySQL的參數設定
- - Group Replication外掛程式的使用
- - Group Replication外掛程式的基本參數設定
- - Group Replication的資料庫用戶
- - Group Replication組初始化
- - 新成員加入組
Group Replication的高可用性
- - 組內成員數量的變化
- - 強制移除故障成員
Group Replication的監控
Group Replication的基本原理
- - 狀態機複製
- - 分散式的狀態機複製
- - 分散式的高可用資料庫
深入理解Group Replication中事務的執行過程
- - 本地事務控制模組
- - 成員間的通信模組
- - 全局事務認證模組
- - 異地事務執行模組
- - 事務流程的總結
深入理解成員加入組的過程
- - 組視圖
- - 加入組時視圖的切換
- - View_change_log_event
- - 恢復
28 MySQL Document Store面面觀
新的JSON數據類型和JSON函式
- - JSON數據類型
- - JSON函式詳解
- - JSON函式的運用
MySQL X Plugin 和 X Protocol
- - 支持NoSQL所做的努力
- - 安裝MySQL X Plugin
MySQL Shell
- - 安裝MySQL Shell
- - 運行MySQL Shell
- - 在MySQL Shell中操作JSON文檔
- - 用腳本執行MySQL Shell
X DevAPI
總結
參考資料
第二部分 Galera篇
29 Galera Cluster的設計與實現
Galera Cluster的優點
Galera的引入
Galera接口
總結
30 Galera 參數解析
狀態參數
變數參數
31 Galera的驗證方法
Binlog與Galera的關係
驗證方法
32 Galera的訊息傳送
33 GCache實現原理
配置參數
實現原理
發散思維
34 大話SST/IST細節
初始化節點環境
連線到集群並且做SST/IST
如何提供增量數據
總結
35 Donor/Desynced詳解
實現方式
意義何在
問答環節
36 Galera的並發控制機制
數據複製
寫集驗證
寫集APPLY
事務Commit
37 Galera的流量控制
流量控制的定義
流量控制的實現原理及影響
兩個問題
38 Galera Cluster影響單節點執行效率的因素
單點驗證
並發控制
等待GTID
總結
39 grastate.dat檔案揭秘
引子
分析研究
總結
40 Galera Cluster從庫的轉移
沒有開啟Server級GTID的情況
開啟了GTID(server級)的情況
總結
41 Galera Cluster節點與其從庫的隨意轉換
背景
從節點向PXC節點的轉換
PXC節點向異步從節點的轉換
42 業務更新慢,不是由Galera引起的
43 線上改表引發的Galera Cluster集群死鎖
背景
用Binlog來代替觸發器
表名交換
Galera Cluster中的問題
一個有趣的實驗
解決方案
總結
第三部分 Inception篇
44 Inception誕生記
關於SQL審核
- - 半自動化方法
人肉法
不滿現狀的追求
何謂Inception
45 Inception安裝與使用
下載和編譯
啟動配置
線上配置需求
需要額外注意的點
使用方法
舉例說明
環境變數的設定
46 支持選項
選項說明
DDL與DML語句分離
小技巧
47 Inception的備份回滾
備份存儲架構
備份所需條件
48 審核規範
支持的語句類型
公共檢查項
插入語句檢查項
更新、刪除語句檢查項
表屬性檢查項
列屬性檢查項
索引屬性檢查項
修改表語句檢查項
總結
49 參數變數
語法和變數
注意事項
50 友好的結果集
結果集結構
總結
51 命令集語句
遠程信息獲取
顯示本地全部變數
顯示本地某個變數
設定本地變數
顯示OSC執行進度
查看當前processlist
52 Inception的彩蛋
對OSC的支持
- - 可選的OSC參數
- - 查看OSC的執行進度
- - 中止OSC的執行
- - 查看所有OSC執行信息
Inception對SQL執行情況的統計
列印語法樹
53 Inception設計
Inception之源
Inception執行流程