第一部分 MySQL篇 5
1 MySQL源代码入门 5
MySQL源代码的组织结构 5
Linux下的编译 7
安装MySQL库 11
MySQL 5.7权限处理 12
2 MySQL启动过程 14
3 连接的生命与使命 22
用户连接线程创建 22
MySQL处理请求 27
总结 31
4 MySQL表对象缓存 32
表结构的实现原理 32
涉及的参数变量 42
优缺点总结 45
存在的问题 45
5 InnoDB初探 47
InnoDB的源代码目录结构 47
InnoDB存储引擎文件组织 49
InnoDB体系结构 52
InnoDB存储引擎启动与关闭 54
InnoDB存储引擎的启动 55
InnoDB存储引擎的关闭 59
6 InnoDB数据字典 66
背景 66
系统表结构 67
字典表加载 69
Rowid管理 75
总结 76
7 InnoDB数据存储结构 77
表空间文件组成结构 78
段 78
簇 79
页面 80
段、簇、页面组织结构 80
8 InnoDB索引实现原理 91
背景 91
B+树及B树的区别 91
索引的设计 92
聚簇索引和二级索引 94
二级索引指针 95
神奇的B+树网络 97
InnoDB索引的插入过程 99
一个页面至少要存储几条记录 107
页面结构管理 110
文件管理头信息 111
页面头信息 113
最小记录和最大记录 115
页面数据空间管理 116
经典的槽管理 117
页面尾部 121
页面重组 122
索引页面的回收 123
9 InnoDB记录格式 125
背景 125
从源码入手了解行格式 126
总结 133
10 揭秘独特的两次写 134
单一页面刷盘 135
批量页面刷盘 136
两次写组织结构 137
批量刷盘两次写实现原理 138
两次写的作用 139
发散思维 139
总结 139
11 InnoDB日志管理机制 141
InnoDB Buffer Pool 141
REDO LOG日志文件管理的用途 147
MTR InnoDB物理事务 150
日志的意义 157
日志记录格式 159
日志刷盘时机 163
REDO日志恢复 165
数据库回滚 180
数据库UNDO段管理 181
数据库UNDO日志记录格式 186
回滚时刻 188
总结 189
12 MySQL 5.7中崭新的MySQL sys Schema 191
Performance Schema的改进 191
sys Schema介绍 192
sys Schema视图摘要 193
sys Schema重点视图与应用场景 194
使用风险 198
总结 198
13方便的MySQL GTID 199
GTID相关概念 200
什么是GTID 200
GTID集合 200
GTID生命周期 201
GTID的维护 202
gtid_executed表 202
gtid_executed表压缩 203
GTID搭建主从 204
搭建主从时,需要注意的MySQL参数 204
开启GTID 205
搭建主从 205
使用GTID案例总结 206
如何跳过一个GTID 206
利用GTID模式快速改变 210
主从复制关系 210
在线将传统模式复制改为GTID模式复制 211
在线将GTID模式复制改为传统模式复制 213
GTID的限制 213
14 MySQL半同步复制 215
半同步特性 215
半同步主库端 217
半同步从库端 222
半同步实现 224
插件安装 228
半同步自动开关 228
15 MySQL 5.7多线程复制原理 229
背景 229
行之有效的延迟优化方法 229
MySQL 5.6的多线程复制 230
MySQL 5.7的多线程复制 231
ordered commit 232
多线程复制分发原理 238
异常故障恢复 239
16大量MySQL表导致服务变慢的问题 244
背景 244
问题分析 245
案例解决 247
总结 251
17 MySQL快速删除大表 252
背景 252
问题分析 252
案例解决 255
发散思维 256
总结 257
18两条不同的插入语句导致的死锁 258
背景 258
问题分析 260
发散思维 265
总结 265
19 MySQL在并发删除同一行数据时导致死锁的分析 266
背景 266
问题分析 267
发散思维 276
总结 276
20参数SQL_SLAVE_SKIP_COUNTER的奥秘 277
21 Binlog中的时间戳 280
背景 280
问题分析 280
发散思维 284
事务中的事件顺序 285
问题延伸 285
show processlist中的Time 288
总结 291
22 InnoDB中Rowid对Binlog的影响 292
背景 292
问题分析 292
总结 297
23 MySQL备份:Percona Xtra-Backup的原理与实践 298
备份背景及类型 298
认识Percona XtraBackup 299
XtraBackup的工作流程 300
XtraBackup的备份原理 302
XtraBackup需要的权限 304
innobackupex常用的备份选项说明 304
XtraBackup备份实践 307
全量备份 307
增量备份 308
并行备份 311
其他备份 311
案例实践与心得 312
建议与提醒 314
24 MySQL分库分表 315
分库分表的种类 315
分库分表的原则 317
分库分表实现 320
数据库层的实现 320
业务层的实现 322
25 MySQL数据安全 323
单机安全 324
集群安全 324
备份安全 324
MySQL实例安全保证 325
Double Write 325
REDO LOG 325
MySQL集群安全保证 327
传统的主从模式如何保证数据库安全 328
Semi_Sync Replication方式的复制 332
MySQL集群化如何保证数据库安全 333
总结 335
26 MySQL性能拾遗 337
适当的数据文件大小 337
碎片空洞问题 338
设计问题 338
合理设计表结构 339
冗余存储 339
拆分存储 341
重复存储 342
特别提醒 342
正确使用索引 343
MySQL系统参数 345
内存和CPU 347
磁盘的革命 348
云中漫步 351
总结 354
27 MySQL Group Replication 356
Group Replication概述 356
组的概念 357
多主复制 358
单独的通信机制 358
Group Replication服务模式 359
单主模式 359
多主模式 360
服务模式的配置 363
Binlog Event的多线程执行 363
group_replication_ applier通道 363
基于主键的并行执行 364
搭建Group Replication复制环境 364
MySQL的参数设置 365
Group Replication插件的使用 366
Group Replication插件的基本参数设置 367
Group Replication的数据库用户 368
Group Replication组初始化 368
新成员加入组 369
Group Replication的高可用性 370
组内成员数量的变化 371
强制移除故障成员 371
Group Replication的监控 371
Group Replication的基本原理 374
状态机复制 374
分布式的状态机复制 375
分布式的高可用数据库 376
深入理解Group Replication中事务的执行过程 377
本地事务控制模块 378
成员间的通信模块 379
全局事务认证模块 382
异地事务执行模块 387
事务流程的总结 387
深入理解成员加入组的过程 389
组视图 389
加入组时视图的切换 390
View_change_log_event 391
恢复 391
28 MySQL Document Store面面观 394
新的JSON数据类型和JSON函数 395
JSON数据类型 395
JSON函数详解 396
JSON函数的运用 408
MySQL X Plugin和X Protocol 410
支持NoSQL所做的努力 410
安装MySQL X Plugin 411
MySQL Shell 411
安装MySQL Shell 412
运行MySQL Shell 413
在MySQL Shell中操作JSON文档 414
用脚本执行MySQL Shell 420
X DevAPI 422
总结 425
参考资料 425
第二部分 Galera篇 430
29 Galera Cluster的设计与实现 430
Galera Cluster的优点 430
Galera的引入 431
Galera接口 433
总结 442
30 Galera参数解析 443
状态参数 443
变量参数 448
31 Galera的验证方法 455
Binlog与Galera的关系 455
验证方法 456
32 Galera的消息传送 458
33 GCache实现原理 461
配置参数 461
实现原理 462
发散思维 465
34大话SST/IST细节 467
初始化节点环境 468
连接到集群并且做SST/IST 469
如何提供增量数据 477
总结 477
35 Donor/Desynced详解 479
实现方式 480
意义何在 480
问答环节 481
36 Galera的并发控制机制 482
数据复制 482
写集验证 483
写集APPLY 483
事务Conmmit 484
37 Galera的流量控制 485
流量控制的定义 485
流量控制的实现原理及影响 486
两个问题 488
38 Galera Cluster影响单节点执行效率的因素 489
单点验证 489
并发控制 490
等待GTID 490
总结 490
39 grastate.dat文件揭秘 491
引子 491
分析研究 492
总结 492
40 Galera Cluster从库的转移 494
没有开启Server级GTID的情况 495
开启了GTID(server级)的情况 496
总结 500
41 Galera Cluster节点与其从库的随意转换 501
背景 501
从节点向PXC节点的转换 502
PXC节点向异步从节点的转换 504
42 业务更新慢,不是由Galera引起的 505
43 在线改表引发的Galera Cluster集群死锁 516
背景 516
用Binlog来代替触发器 517
表名交换 520
Galera Cluster中的问题 524
一个有趣的实验 526
解决方案 531
总结 532
第三部分 Inception篇 537
44 Inception诞生记 537
关于SQL审核 537
半自动化方法 537
人肉法 540
不满现状的追求 542
何谓Inception 543
45 Inception安装与使用 545
下载和编译 545
启动配置 547
线上配置需求 548
需要额外注意的点 549
使用方法 549
举例说明 551
环境变量的设置 553
46支持选项 555
选项说明 555
DDL与DML语句分离 559
小技巧 560
47 Inception的备份回滚 562
备份存储架构 562
备份所需条件 567
48审核规范 568
支持的语句类型 568
公共检查项 569
插入语句检查项 570
更新、删除语句检查项 570
表属性检查项 570
列属性检查项 571
索引属性检查项 572
修改表语句检查项 573
总结 573
49参数变量 574
语法和变量 574
注意事项 578
50友好的结果集 580
结果集结构 580
总结 583
51命令集语句 584
远程信息获取 584
显示本地全部变量 586
显示本地某个变量 586
设置本地变量 587
显示OSC执行进度 588
查看当前processlist 589
52 Inception的彩蛋 591
对OSC的支持 591
可选的OSC参数 591
查看OSC的执行进度 593
中止OSC的执行 596
查看所有OSC执行信息 597
Inception对SQL执行情况的统计 597
打印语法树 599
53 Inception设计 609
Inception之源 609
Inception执行流程 611