《高性能MySQL(第4版)》封面

内容简介

《高性能MySQL》一直是MySQL领域的经典之作,影响了一代又一代的DBA和技术人员,从第3版出版到第4版出版过去了近十年,MySQL也从5.5版本更新到了8.0版本。第4版中增加了大量对MySQL5.7和8.0版本新特性的介绍,删除了一些在新版本中已经废弃或者不再常用的功能,还增加了对云数据库的介绍,减少了在官方文档中已有的基础使用和配置相关的内容。这些年,MySQL经过在大量大规模互联网场景中的应用验证,使得本书在继续关注高性能之外,还用了较多的篇幅来介绍如何实现MySQL的大规模可扩展应用和合规性问题,这是相比第3版最大的不同,也是本书封面上所写的“经过大规模运维验证的策略”的体现。

《高性能MySQL(第4版)》适合数据库管理员(DBA)阅读,也适合系统运维和开发人员参考学习。不管你是数据库新手还是专家,相信都能从本书中有所收获。

作者简介

SilviaBotros是Twilio的高级首席工程师。在SendGrid工作期间,她帮助部署和维护了各种MySQL数据存储,这些数据存储支持邮件管道和SendGrid提供的其他产品,并推动MySQL设计从开始到生产。

JeremyTinley是Etsy的高级职员工程师,拥有超过20年的MySQL经验。在他的职业生涯中,他管理了成千上万个MySQL实例,着眼于可用性、可靠性和运营效率。

译者简介

宁海元有超过十年的数据库管理经验,从最初的SQLServer2000到Oracle再到MySQL,擅长数据库高可用架构、性能优化和故障诊断。目前专注于无线数据领域。网络常用名NinGoo,

周振兴毕业于北京师范大学数学系,2009年开始负责MySQL运维管理工作,有丰富的MySQL性能优化、Troubleshooting经验,对MySQL主要模块的实现和原理有深入的研究,对系统架构、高可用环境规划都有深入理解。

张新铭,云掣资深数据库专家,网络常用名俊达,曾任淘宝、支付宝DBA,全程参与淘宝核心业务系统底层存储系统改造,参与建设支付宝MySQL标准化运维体系。对于数据库体系结构和运作原理有深入的理解,擅长大数据量和高访问量OLTP数据库的设计和优化。

目录

序.................................................................................xxiii
前言...............................................................................xxv
本书第4版的致谢..............................................................xxix
第1章 MySQL架构............................................................1
MySQL的逻辑架构......................................................................................................1
连接管理与安全性................................................................................................2
优化与执行............................................................................................................2
并发控制.......................................................................................................................3
读写锁...................................................................................................................3
锁的粒度...............................................................................................................4
事务..............................................................................................................................5
隔离级别...............................................................................................................7
死锁.......................................................................................................................8
事务日志...............................................................................................................9
MySQL中的事务................................................................................................10
多版本并发控制..........................................................................................................12
复制............................................................................................................................13
数据文件结构.............................................................................................................14
InnoDB引擎...............................................................................................................14
JSON文档支持...................................................................................................15
数据字典的变化..................................................................................................16
原子DDL............................................................................................................16
小结............................................................................................................................16
第2章 可靠性工程世界中的监控..............................................17
可靠性工程对DBA团队的影响.................................................................................18
定义服务水平目标......................................................................................................18
怎样才能让客户满意...........................................................................................19
用什么来度量.............................................................................................................20
定义SLI和SLO.................................................................................................20
监控解决方案......................................................................................................21
监控可用性..........................................................................................................22
监控查询延迟......................................................................................................24
监控报错.............................................................................................................24
主动监控.............................................................................................................25
度量长期性能.............................................................................................................31
了解业务节奏......................................................................................................31
有效地跟踪指标..................................................................................................32
使用监控工具检查性能.......................................................................................33
使用SLO来指导整体架构..................................................................................34
小结............................................................................................................................34
第3章 PerformanceSchema...........................................35
PerformanceSchema介绍...........................................................................................35
插桩元件.............................................................................................................36
消费者表的组织..................................................................................................37
资源消耗.............................................................................................................39
局限性.................................................................................................................39
sysSchema..........................................................................................................40
理解线程.............................................................................................................40
配置............................................................................................................................41
启用或禁用PerformanceSchema........................................................................42
启用或禁用插桩..................................................................................................42
启用或禁用消费者表...........................................................................................43
优化特定对象的监控...........................................................................................44
优化线程的监控..................................................................................................45
调整PerformanceSchema的内存大小................................................................46
默认值.................................................................................................................46
使用PerformanceSchema...........................................................................................46
检查SQL语句....................................................................................................46
检查读写性能......................................................................................................54
检查元数据锁......................................................................................................56
检查内存使用情况..............................................................................................56
检查变量.............................................................................................................59
检查最常见的错误..............................................................................................62
检查PerformanceSchema自身...........................................................................63
小结............................................................................................................................65
第4章 操作系统和硬件优化..................................................66
什么限制了MySQL的性能........................................................................................66
如何为MySQL选择CPU...........................................................................................67
平衡内存和磁盘资源..................................................................................................67
缓存、读取和写入..............................................................................................67
你的工作集是什么..............................................................................................68
固态存储.....................................................................................................................68
闪存概述.............................................................................................................69
垃圾收集.............................................................................................................69
RAID性能优化...........................................................................................................70
RAID故障、恢复和监控....................................................................................72
RAID配置和缓存...............................................................................................73
网络配置.....................................................................................................................75
选择文件系统.............................................................................................................77
选择磁盘队列调度器...........................................................................................79
内存和交换..........................................................................................................79
操作系统状态......................................................................................................81
其他有用的工具..................................................................................................84
小结............................................................................................................................84
第5章 优化服务器设置.......................................................86
MySQL的配置是如何工作的.....................................................................................87
语法、作用域和动态性.......................................................................................88
持久化系统变量..................................................................................................89
设置变量的副作用..............................................................................................89
规划变量的更改..................................................................................................90
什么不该做.................................................................................................................91
创建MySQL配置文件...............................................................................................92
最小化配置..........................................................................................................92
检查MySQL服务器的状态变量.........................................................................94
配置内存使用.............................................................................................................94
每个连接的内存需求...........................................................................................94
为操作系统保留内存...........................................................................................95
InnoDB缓冲池....................................................................................................95
线程缓存.............................................................................................................96
配置MySQL的I/O行为............................................................................................97
InnoDB事务日志................................................................................................98
日志缓冲区..........................................................................................................98
InnoDB表空间..................................................................................................100
其他I/O配置选项.............................................................................................103
配置MySQL并发.....................................................................................................103
安全设置...................................................................................................................104
高级InnoDB设置.....................................................................................................106
小结..........................................................................................................................108
第6章 schema设计与管理................................................109
选择优化的数据类型................................................................................................109
整数类型............................................................................................................111
实数类型............................................................................................................111
字符串类型........................................................................................................112
日期和时间类型................................................................................................117
位压缩数据类型................................................................................................119
JSON数据类型.................................................................................................121
选择标识符........................................................................................................124
特殊数据类型....................................................................................................126
MySQLschema设计中的陷阱..................................................................................127
太多的列...........................................................................................................127
太多的联接........................................................................................................127
全能的枚举........................................................................................................127
变相的枚举........................................................................................................128
NULL不是虚拟值.............................................................................................128
schema管理..............................................................................................................128
作为数据存储平台一部分的schema管理.........................................................129
小结..........................................................................................................................135
第7章 创建高性能的索引....................................................136
索引基础...................................................................................................................136
索引的类型........................................................................................................137
使用索引的优点................................................................................................141
高性能的索引策略....................................................................................................142
前缀索引和索引的选择性.................................................................................142
多列索引...........................................................................................................145
选择合适的索引列顺序.....................................................................................147
聚簇索引...........................................................................................................150
覆盖索引...........................................................................................................157
使用索引扫描来做排序.....................................................................................159
冗余和重复索引................................................................................................161
未使用的索引....................................................................................................164
维护索引和表...........................................................................................................164
找到并修复损坏的表.........................................................................................165
更新索引统计信息............................................................................................165
减少索引和数据的碎片.....................................................................................167
小结..........................................................................................................................168
第8章 查询性能优化.........................................................170
为什么查询速度会慢................................................................................................170
慢查询基础:优化数据访问.....................................................................................171
是否向数据库请求了不需要的数据..................................................................171
MySQL是否在扫描额外的记录........................................................................173
重构查询的方式........................................................................................................177
一个复杂查询还是多个简单查询......................................................................177
切分查询...........................................................................................................178
分解联接查询....................................................................................................178
查询执行的基础........................................................................................................179
MySQL的客户端/服务器通信协议.................................................................180
查询状态...........................................................................................................182
查询优化处理....................................................................................................183
查询执行引擎....................................................................................................196
将结果返回给客户端.........................................................................................197
MySQL查询优化器的局限性...................................................................................197
UNION的限制..................................................................................................197
等值传递...........................................................................................................198
并行执行...........................................................................................................198
在同一个表中查询和更新.................................................................................198
优化特定类型的查询................................................................................................199
优化COUNT()查询..........................................................................................199
优化联接查询....................................................................................................201
使用WITHROLLUP优化GROUPBY............................................................201
优化LIMIT和OFFSET子句............................................................................202
优化SQL_CALC_FOUND_ROWS...................................................................203
优化UNION查询.............................................................................................204
小结..........................................................................................................................204
第9章 复制....................................................................205
复制概述...................................................................................................................205
复制如何工作....................................................................................................207
复制原理...................................................................................................................208
选择复制格式....................................................................................................208
全局事务标识符................................................................................................208
崩溃后的复制安全............................................................................................210
延迟复制...........................................................................................................210
多线程复制........................................................................................................211
半同步复制........................................................................................................214
复制过滤器........................................................................................................214
复制切换...................................................................................................................216
计划内切换........................................................................................................216
计划外切换........................................................................................................217
切换时的权衡....................................................................................................217
复制拓扑...................................................................................................................217
主动/被动模式.................................................................................................218
主动/只读池模式.............................................................................................219
不推荐的一些拓扑架构.....................................................................................220
复制管理和维护........................................................................................................223
复制监控...........................................................................................................223
观测复制延迟....................................................................................................224
确定副本数据的一致性.....................................................................................225
复制问题和解决方案................................................................................................226
源端二进制日志损坏.........................................................................................226
非唯一的服务器ID...........................................................................................226
未配置服务器ID...............................................................................................227
临时表丢失........................................................................................................227
没有复制所有变更............................................................................................227
复制延迟过大....................................................................................................228
来自源服务器的超大数据包.............................................................................229
磁盘空间耗尽....................................................................................................229
复制的限制........................................................................................................229
小结..........................................................................................................................230
第10章 备份与恢复..........................................................231
为什么要备份........................................................................................................232
定义恢复需求.......................................................................................................233
设计MySQL备份方案.........................................................................................234
在线备份还是离线备份.....................................................................................235
逻辑备份还是裸文件备份.................................................................................236
备份什么...........................................................................................................238
增量备份和差异备份.........................................................................................239
复制...................................................................................................................240
管理和备份二进制日志..........................................................................................241
备份和恢复工具....................................................................................................241
MySQLEnterpriseBackup................................................................................241
PerconaXtraBackup..........................................................................................242
mydumper..........................................................................................................242
mysqldump........................................................................................................242
备份数据................................................................................................................242
逻辑SQL备份..................................................................................................242
文件系统快照....................................................................................................244
PerconaXtraBackup..........................................................................................249
从备份中恢复数据.................................................................................................252
恢复逻辑备份....................................................................................................253
从快照中恢复....................................................................................................254
使用PerconaXtraBackup进行恢复..................................................................255
原始文件恢复后启动MySQL...........................................................................256
小结......................................................................................................................257
第11章 扩展MySQL.......................................................258
什么是可扩展性.....................................................................................................258
读限制与写限制工作负载.......................................................................................260
理解工作负载....................................................................................................260
读限制工作负载................................................................................................261
写限制工作负载................................................................................................261
功能拆分...............................................................................................................262
使用读池扩展读.....................................................................................................262
管理读池的配置................................................................................................264
读池健康检查....................................................................................................265
选择负载均衡器算法.........................................................................................266
排队机制....................................................................................................267
使用分片扩展写...............................................................................................268
选择切分方案....................................................................................................269
多个分片键........................................................................................................270
跨分片查询........................................................................................................271
Vitess.................................................................................................................272
ProxySQL..........................................................................................................275
小结.............................................................................................................279
第12章 云端的MySQL....................................................280
托管MySQL.............................................................................................280
AmazonAuroraforMySQL...............................................................................281
GCPCloudSQL.................................................................................................283
虚拟机上的MySQL..................................................................................................284
云上的机器类型................................................................................................284
选择正确的机器类型.........................................................................................285
选择正确的磁盘类型.........................................................................................286
额外的建议........................................................................................................287
小结...........................................................................................................289
第13章 MySQL的合规性.................................................291
什么是合规性..........................................................................................291
服务组织控制类型2..........................................................................................292
萨班斯-奥克斯利法案.....................................................................................292
支付卡行业数据安全标准.................................................................................292
健康保险可携带性和责任法案..........................................................................292
联邦风险和授权管理计划.................................................................................293
通用数据保护条例............................................................................................293
SchremsII.........................................................................................................293
建立合规控制体系....................................................................................294
机密信息管理....................................................................................................294
角色与数据分离................................................................................................297
跟踪变更...........................................................................................................297
备份和恢复过程................................................................................................302
小结......................................................................................................................304
附录A 升级MySQL.........................................................305
附录B Kubernetes上的MySQL.......................................310
······

最后修改:2024 年 01 月 30 日