编辑推荐
 ;  ;  ;ACE,腾讯云TVP,一线数据库专家多年运维经验凝聚成简,全面理解新时代DBA技术转型思路和运维心得 ;
内容简介
 ;  ;  ;本书是来自一线MySQL DBA的技能进阶笔记,凝结了作者多年数据库管理心得。全书从运维管理、架构优化和运维开发三个层面娓娓道来,精心筛选了作者在实际工作中总结的技巧、对常见问题的处理方法以及对于运维体系的思考和实践;尤其是运维开发章节从0 到1 构建运维体系,能够对DBA已有知识体系和技能栈做到全新梳理。
作者简介
 ;  ;  ; 杨建荣,技术爱好者,dbaplus社群发起人之一,Oracle ACE,腾讯云TVP,YEP成员。拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优。拥有Oracle 10g OCP、OCM、MySQL OCP认证,对Shell、Java、Python有一定功底。每天通过微信、 博客进行技术分享,已连续坚持2000多天。
目录
第1 章 MySQL 发展和技术选型
1.1 如何看待MySQL..............................................................................................................1
1.1.1 MySQL 始出...........................................................................................................1
1.1.2 MySQL 学习周期和难度........................................................................................1
1.1.3 解读DB-Engines 的正确姿势................................................................................2
1.1.4 MySQL 主要的一些分支........................................................................................3
1.1.5 如何看待MySQL 的技术发展...............................................................................3
1.2 如何看待MySQL 存储引擎..............................................................................................5
1.2.1 InnoDB 发展时间线...............................................................................................6
1.2.2 存储引擎之战.........................................................................................................7
1.2.3 存储引擎矩阵图.....................................................................................................7
1.3 MySQL 软件和版本选型...................................................................................................8
1.3.1 选择官方版的原因.................................................................................................9
1.3.2 Percona 分支的优劣对比........................................................................................9
1.3.3 选择MariaDB 的原因..........................................................................................10
1.3.4 MySQL 版本选型.................................................................................................10
1.3.5 分支选择的参考和标准........................................................................................11
1.3.6 初步结论...............................................................................................................13
1.4 MySQL 常用工具选择和建议.........................................................................................13
1.4.1 运维管理类工具...................................................................................................14
1. 主流运维管理工具...........................................................................................14
2. 数据备份恢复工具...........................................................................................14
3. MySQL 审计插件............................................................................................15
1.4.2 应用工具...............................................................................................................15
1. 客户端工具......................................................................................................15
2. 数据库版本管理工具.......................................................................................15
1.4.3 监控管理类工具...................................................................................................16
1. 操作系统监控..................................................................................................16
2. 性能监控工具..................................................................................................16
1.4.4 诊断和优化工具...................................................................................................16
1. 诊断工具..........................................................................................................16
2. 性能测试工具..................................................................................................18
3. 慢日志分析工具..............................................................................................18
1.4.5 初步结论...............................................................................................................18
1.5 MySQL 安装....................................................................................................................19
1.5.1 常见的三种安装方式............................................................................................19
1.5.2 MySQL 安装规范.................................................................................................20
1.5.3 MySQL 5.7 安装部署实践与总结........................................................................20
1.5.4 搭建从库...............................................................................................................23
案例1-1:MySQL 频繁停库的问题分析........................................................................25
第2 章理解MySQL 体系结构
2.1 通过文件来了解MySQL 体系结构.................................................................................29
2.1.1 从例子来理解MySQL 存储结构.........................................................................32
2.1.2 慢日志诊断...........................................................................................................32
案例2-1:MySQL 日志故障的处理和分析....................................................................35
2.2 玩转MySQL 数据字典....................................................................................................38
2.2.1 MySQL 巡检模块:Sys Schema 的设计..............................................................39
2.2.2 解惑:MySQL 关于数据字典的一个疑问...........................................................47
2.3 InnoDB 体系结构............................................................................................................50
2.3.1 InnoDB 体系结构图.............................................................................................51
2.3.2 查看InnoDB 状态的小技巧.................................................................................52
2.3.3 InnoDB 的多线程技术..........................................................................................53
2.3.4 InnoDB 的缓存池管理技术..................................................................................55
2.3.5 InnoDB 中的脏页管理..........................................................................................58
2.3.6 InnoDB 的日志管理.............................................................................................60
2.3.7 InnoDB 中的检查机制..........................................................................................62
2.3.8 MySQL 是如何保证数据完整性的......................................................................63
2.4 换个角度看MySQL.........................................................................................................66
2.4.1 MySQL 里的一些极限值......................................................................................66
案例2-2:关于MySQL 中的一些极限值的初步验证纠错............................................. 67
2.4.2 mysql. service 启动脚本浅析................................................................................68
2.4.3 MySQL 待改进的一些问题..................................................................................71
2.5 MySQL 参数解析............................................................................................................72
2.5.1 MySQL 参数变化分析..........................................................................................73
2.5.2 MySQL 5.7 参数解析............................................................................................74
第3 章 MySQL 基础运维面面观
3.1 环境部署和构建..............................................................................................................76
3.1.1 源码安装MySQL.................................................................................................76
3.1.2 在eclipse 中配置MySQL 源码环境....................................................................80
3.1.3 分分钟搭建MySQL 一主多从环境......................................................................87
3.2 MySQL 服务管理............................................................................................................88
3.2.1 Socket 连接...........................................................................................................88
3.2.2 TCP/IP 连接..........................................................................................................89
3.2.3 MySQL 访问模式的演进......................................................................................89
3.2.4 无密码登录...........................................................................................................90
案例3-1:通过shell 脚本检测MySQL 服务信息.......................................................... 91
案例3-2:MySQL 密码加密认证的简单脚本................................................................. 93
案例3-3:MySQL 中如何得到权限信息........................................................................94
方法1:重新导出导入整个数据库......................................................................94
方法2:导出mysql 的权限配置..........................................................................94
方法3:pt 工具导出............................................................................................95
3.3 MySQL 备份恢复............................................................................................................97
3.3.1 数据安全警示录...................................................................................................97
3.3.2 常规备份方案.......................................................................................................98
备份工具1:mysqldump......................................................................................99
备份工具2:xtrabackup 工具............................................................................101
备份工具3:mysqlpump ....................................................................................102
备份工具4:mysqlbackup..................................................................................104
备份工具5:binlog 备份工具............................................................................105
数据导出小技巧.................................................................................................105
数据导入小技巧.................................................................................................106
3.3.3 MySQL 数据恢复...............................................................................................106
恢复方法1:使用xtrabackup 进行数据全量恢复............................................. 107
恢复方法2:使用xtrabackup 进行数据增量恢复............................................. 109
恢复方法3:使用mysqlbinlog 手工恢复.......................................................... 112
恢复方法4:使用开源工具恢复数据 binlog2sql.............................................. 115
恢复方法5:使用参数innodb_force_recovery.................................................. 117
恢复方法6:基于逻辑的数据恢复....................................................................117
恢复方法7:基于冷热数据分离的恢复思路.................................................... 118
恢复方法8:基于句柄的无备份恢复................................................................ 119
恢复方法9:直接恢复物理文件........................................................................121
3.4 MySQL 安全审计..........................................................................................................122
3.4.1 常用方法.............................................................................................................122
3.4.2 性能测试结果.....................................................................................................123
3.4.3 测试小结.............................................................................................................123
第4 章 SQL 开发规范和基础
4.1 数据库开发规范............................................................................................................124
4.1.1 配置规范.............................................................................................................124
4.1.2 建表规范.............................................................................................................125
iv MySQL DBA 工作笔记:数据库管理、架构优化与运维开发
4.1.3 命名规范.............................................................................................................125
4.1.4 索引规范.............................................................................................................125
4.1.5 应用规范.............................................................................................................126
4.1.6 分表规范.............................................................................................................127
4.1.7 存储过程规范.....................................................................................................127
4.1.8 安全规范.............................................................................................................127
4.1.9 数据安全规范.....................................................................................................128
案例4-1:MySQL 无法创建表的问题分析..................................................................131
4.2 解读MySQL 数据类型..................................................................................................135
4.2.1 MySQL 整数类型...............................................................................................135
案例4-2:数值类型在binlog 中需要注意的细节......................................................... 136
4.2.2 MySQL 小数类型...............................................................................................138
4.2.3 MySQL 字符串类型...........................................................................................139
案例4-3:MySQL 中需要注意的字段长度..................................................................140
4.2.4 MySQL 日期类型...............................................................................................142
案例4-4:MySQL 多版本的时间类型问题..................................................................143
4.2.5 JSON 类型..........................................................................................................144
4.3 MySQL 特有的SQL......................................................................................................146
4.3.1 新增类................................................................................................................146
4.3.2 删除类................................................................................................................147
4.3.3 修改类................................................................................................................148
专题4-1:解读Replace into 语句.................................................................................148
4.3.4 查询类................................................................................................................153
4.4 MySQL 常用函数..........................................................................................................153
4.4.1 数学函数.............................................................................................................154
案例4-5:MySQL 字符串中抽取数值的方法............................................................... 155
案例4-6:order by 的妙用.............................................................................................156
4.4.2 字符串函数.........................................................................................................157
案例4-7:MySQL 字符函数的压力测试......................................................................160
案例4-8:字符串动态匹配...........................................................................................162
4.4.3 条件控制函数.....................................................................................................162
4.4.4 日期和时间函数.................................................................................................163
案例4-9:Now()和sysdate()的差别..............................................................................166
4.4.5 系统信息函数.....................................................................................................169
4.4.6 其他常用的MySQL 函数...................................................................................169
第5 章 MySQL 运维管理实践
5.1 数据变更管理................................................................................................................171
5.1.1 MySQL 脚本部署的四种策略............................................................................171
案例5-1:实战对比四种脚本部署策略的优劣............................................................. 172
5.1.2 通过对比来了解onlineDDL..............................................................................175
案例5-2:MySQL 5.5 版本原生的DDL 代价测试....................................................... 176
案例5-3:MySQL 5.7 版本原生的DDL 代价测试....................................................... 176
5.1.3 Online DDL 的两种算法.....................................................................................177
案例5-4:对比测试online DDL 的两种算法(copy 和inplace) ............................... 177
5.1.4 pt-osc 的原理和实现...........................................................................................181
案例5-5:源码分析pt-osc 的实现原理........................................................................181
案例5-6:平滑删除数据的小技巧................................................................................184
5.2 MySQL 复制管理..........................................................................................................186
5.2.1 MySQL 复制的四种类型....................................................................................186
5.2.2 MySQL 半同步复制...........................................................................................187
案例5-7:简单测试半同步复制....................................................................................190
5.2.3 GTID 的管理模式...............................................................................................191
案例5-8:修复GTID 复制失败的分析.........................................................................195
5.2.4 如何看待主从延迟.............................................................................................200
案例5-9:MySQL 5.6、5.7 版本并行复制测试............................................................ 203
5.2.5 主从数据不一致的分析......................................................................................209
案例5-10:经典的自增列问题测试..............................................................................210
案例5-11:主从不一致的修复过程..............................................................................212
第6 章MySQL 查询优化
6.1 MySQL 优化基础..........................................................................................................215
6.1.1 MySQL 索引解析...............................................................................................216
6.1.2 推理SQL 的解析过程........................................................................................221
案例6-1:group by 问题浅析........................................................................................224
6.1.3 读懂执行计划.....................................................................................................227
6.1.4 使用MySQL Profile 定位性能瓶颈....................................................................234
案例6-2:合理评估新特性的使用................................................................................238
6.2 SQL 查询优化................................................................................................................240
6.2.1 MySQL 中的派生表...........................................................................................240
6.2.2 MySQL 中的半连接...........................................................................................243
6.2.3 MySQL 反连接...................................................................................................247
6.2.4 行值表达式优化.................................................................................................250
6.3 MySQL 优化技巧..........................................................................................................251
6.3.1 MySQL 分页逻辑优化.......................................................................................251
6.3.2 数据隐式转换.....................................................................................................254
案例6-3:一条update 语句引发的“血案”................................................................ 256
第7 章 MySQL 事务和锁
7.1 MySQL 并发控制..........................................................................................................263
7.1.1 为什么需要事务.................................................................................................263
7.1.2 MySQL 并发控制技术方案................................................................................265
7.1.3 MySQL 中的MVCC...........................................................................................266
7.2 事务隔离级别................................................................................................................269
7.2.1 MySQL 中的隔离级别RR 和RC.......................................................................270
7.2.2 RR 隔离级别下的unique 失效...........................................................................272
7.2.3 RR 隔离级别下的更新冲突................................................................................274
7.3 MySQL 锁机制..............................................................................................................275
7.3.1 MySQL 锁的类型...............................................................................................275
7.3.2 索引加锁过程的差异..........................................................................................278
7.3.3 这样分析一个死锁问题......................................................................................280
7.4 经典的死锁案例集........................................................................................................283
场景1:3 条insert 语句导致的死锁问题......................................................................283
场景2:事务回滚导致的死锁.......................................................................................285
场景3:自增列导致的死锁...........................................................................................287
场景4:事务提交导致的死锁问题...............................................................................288
场景5:delete 和insert 混合的死锁..............................................................................291
场景6:2 条delete 语句导致的死锁问题.....................................................................293
7.5 事务降维........................................................................................................................294
降维策略1:存储过程调用转换为透明的SQL 调用................................................... 295
降维策略2:Drop 操作转换为可逆的DDL 操作......................................................... 295
降维策略3:Truncate 操作转换为安全的DDL 操作................................................... 295
降维策略4:DDL 操作转换为DML 操作....................................................................296
降维策略5:Delete 操作转换为高效操作....................................................................296
降维策略6:Update 操作转换为Insert 操作................................................................ 296
第8 章 MySQL 集群和高可用设计
8.1 MySQL 高可用方案.......................................................................................................297
8.1.1 MySQL 高可用方案概览....................................................................................298
8.1.2 MySQL 高可用方案的建议................................................................................298
8.1.3 MySQL 高可用的迭代方案思考........................................................................299
8.2 MySQL 高可用方案之MHA.........................................................................................300
8.2.1 MHA 原理和架构...............................................................................................300
8.2.2 如何系统的测试MHA.......................................................................................303
8.2.3 快速测试MHA 的步骤......................................................................................304
8.2.4 从代码关系图理清MHA 的脉络.......................................................................308
8.2.5 我们可能不知道的MHA 逻辑...........................................................................312
8.2.6 MHA 的缺点和局限性.......................................................................................313
8.2.7 MHA 的补充和改进...........................................................................................314
8.3 MySQL 高可用方案之InnoDB Cluster......................................................................... 315
8.3.1 InnoDB Cluster 三大件.......................................................................................316
8.3.2 快速入手InnoDB Cluster 的建议.......................................................................317
8.3.3 使用sandbox 快速部署InnoDBCluster............................................................. 318
8.3.4 InnoDb Cluster 核心组件:MGR....................................................................... 323
8.3.5 部署MGR 的几种姿势.......................................................................................324
方法1:分分钟搭建MGR 单主/多主测试环境................................................ 324
方法2:线上环境规范部署...............................................................................325
8.3.6 常见的MGR 问题..............................................................................................327
问题1:单主模式加入节点失败........................................................................328
问题2:模式配置错误导致无法启动集群........................................................ 328
问题3:节点配置不统一导致集群无法启动.................................................... 328
问题4:数据写入失败修复...............................................................................329
问题5:模拟灾难..............................................................................................329
问题6:如何判断一个复制组中的主节点........................................................ 330
8.3.7 迁移到MGR 需要思考的问题...........................................................................331
案例8-1:切换到MGR 的参考步骤.................................................................332
案例8-2:大事务导致的运维系统无法访问..................................................... 336
8.4 基于consul 的高可用扩展方案.....................................................................................339
8.4.1 基于consul 服务的高可用方案..........................................................................339
8.4.2 基于MHA Consul 的MySQL 高可用设计.......................................................340
8.4.3 MySQL 高可用方案:MGR consul 组合测试...................................................341
第9 章 MySQL 性能测试
9.1 sysbench 压测MySQL...................................................................................................344
9.1.1 压测MySQL——环境部署和硬件压测.............................................................344
9.1.2 压测MySQL 起步..............................................................................................348
9.1.3 压测MySQL——提高吞吐量测试.....................................................................351
9.1.4 压测MySQL——定位压测瓶颈........................................................................356
9.1.5 定制sysbench 的Lua 模板.................................................................................360
9.2 批量初始化数据性能测试.............................................................................................363
9.2.1 批量初始化数据初步想法..................................................................................363
9.2.2 批量初始化数据的方案......................................................................................363
方案1:存储过程导入.......................................................................................363
方案2:使用内存表...........................................................................................364
方案3:使用程序/脚本生成数据,批量导入................................................... 365
方案4:使用内存表和外部文件导入混合........................................................ 365
viii MySQL DBA 工作笔记:数据库管理、架构优化与运维开发
方案5:存储过程显式事务提交........................................................................365
方案6:批量生成insert 语句使用管道导入..................................................... 366
方案7:批量生成insert 语句显式事务提交..................................................... 366
方案8:sysbench 工具生成...............................................................................366
方案9:Oracle 的极简方案...............................................................................367
前沿
MySQL 是开源数据库方向的典型代表,它拥有成熟的生态体系,同时在可靠性、性
能、易用性方面表现出色,它的发展历程见证了互联网的兴衰与成长。
在 DeveloperWeek 上曾发起一个调查,超过 3/5 的受访者使用 SQL,其中MySQL
以 38.9% 的使用率高居榜首,其后依次是 MongoDB(24.6%)、PostgreSQL(17.4%)、
Redis(8.4%)和 Cassandra(3.0%)。毫无疑问,以MySQL为主的开源技术生态正变得越
来越流行。
随着客户要求不断变化,网络环境日趋可信和安全,企业不断释放出“倍增创新”能力,
也就意味着数字化转型开始从IT 时代进入DT 时代。面对大量的数据和业务,更多的公司
意识到了数据价值的重要性,如何管理和利用好数据已经变得越来越重要,MySQL 是其
中的排头兵。
现如今云计算已经越来越普及,很多企业的业务都在逐步迁移到云端,对于MySQL
来说是机遇也是挑战,目前可以看到行业里MySQL DBA 的市场缺口依然很大,优秀的
MySQL DBA 正在成为各个互联网公司的抢手人才。在工作内容方面,原来DBA 需要花费
大量精力去做的基础运维工作(安装部署、备份恢复等),现在比例在逐步减少,不是这
些事情不重要,而是DBA 也需要技能升级,其实在传统数据库运维工作之外,还有运维
管理、运维架构和SQL 优化工作,因为我们面对的可能是成百上千套数据库环境,我们更
需要考虑工作效率和质量,Devops 这些年在数据库运维方向提供了很好的思路和实践,我
们现在听到地更多是自动化平台、智能化平台。如果前几年是在喊口号,那么这几年已经
落地开花,甚至看到一些产出了,所以对于MySQL DBA 来说任重道远,不光对运维业务
和技术要精深,而且必须要懂得运维开发技术。
写书的缘起
我是一个坚持写技术博客的人,内容不局限于技术,也包含一些生活感悟,从2014
年2 月的一天开始每天一篇博客,这一路竟然坚持了下来,在2016 年6 月,我完成《Oracle
DBA 工作笔记》,汇聚了近800 天的学习笔记,目前已经重印7次,而截止到2019 年6
月,我已经坚持了2000 多天,当然我还会继续坚持下去,就如同我最开始给自己的目标
一样。
从最开始的满腔热情,到融入成为生活的一部分,这其中的挑战还是很多的,尤其是
近些年,发现对于体力的挑战更为明显,对我来说,在每天23:59 之前能够完成博客就是
一种记忆打卡。
随着博客的内容量越来越多,有些网友在博客和我的互动也越来越多,我发现原本是
利己的事情慢慢变得利人了,当然这种状况很快会碰到另外一个瓶颈,那就是当博客内容
达到一定数量的时候,你会发现如何有效地管理和梳理这些内容远比想象的要复杂,同时
DBA 方向也相比过去有了更高的要求和压力,为了保持竞争力和更好地完成工作,我需要
不断的拥抱变化,学习新技能。正是和网友的互动互助中,让我对已有的知识体系产生了
疑问,也决定开始行动,改进方法。
古人云:“若起不得法,则杂乱浮泛”。虽然写书的想法是好的,但是如果没有花时间
去梳理一个完整的知识体系,是很难把这些经验利用起来的,而这也是我DBA 笔记系列
的缘起。
另外,在内容的编排上,我选择了数据库管理、架构和SQL 优化、运维开发这三个方
面。一方面能够突出工作笔记的特色,避免写出过多重复经验的内容,另外一方面是目前
市面上运维管理的书籍相对多一些,但是工作中对于架构和SQL 优化的内容相对较少,而
对于运维开发的内容就更少了,算是一个补充吧。
现在社会的焦虑比以往要多一些,简单来说,感觉到威胁、找不到突破口,内心空洞,
这就是焦虑。我在前几年的焦虑达到了顶点,总是会不断地焦虑自己的未来,焦虑团队的
未来等,而这些心路历程都在书中给出了一些解决思路。《一代宗师》中这样说道:“从此
只有眼前路,没有身后身,回头无岸”,我想技术之路也是如此,我们只有继续坚持走下去,
才能找到答案。
本书适合的读者对象
 ;MySQL DBA 或者开发人员。
 ; 有一定的SQL 基础,并且期望能够提升自我的读者。
给读者的一些建议
(1)要有一个清晰的规划;凡事预则立,不预则废,制定计划是给自己的一个心理暗
示。给自己一个阶段性目标,然后把它做分解,拆分成为自己能够实现的一些任务。对于
规划,要有长期规划和短期规划,长期规划就是几年内希望自己有什么样的成长,同时短
期内希望达到什么目标,都可以做到统筹。一种行之有效的方法就是:拿着若干期望的目
标,然后反推过程,应该怎么去落实,实践效果要好一些。
(2)建立技术连接的思维;我们很多同学就是专注在了技术线,对于某一个技术有较
为深入的学习,但是对于其他方向的技术却有欠缺,这样很容易形成技术壁垒,思考问题
的方式也会更局限于你所熟悉的方式和领域,对成长是不利的。我们不要钻牛角尖,不要
什么都要用MySQL 来实现,面对需求,永远没有最好的数据库,只有最适合的业务场景,
一旦你开始更理性的思考,你才会更接近于问题的本质。
(3)充分利用碎片时间;有很多人说,我现在可忙了,没时间。其实细细观察,总是
会有很多的碎片时间:早高峰、午饭后、晚高峰、晚饭后、睡觉前,这些都是碎片化相对
集中的时间,可以充分利用起来做很多的事情。
(4)多参加社区、社群的活动和技术交流问答;对于参加社区、社群活动,自己也是
深有感触,可能技术圈子的人性格相对比较内敛,在技术上态度还是开放的。多参加一些
社区、社群的交流,可以让自己少走很多弯路,因为不是所有的坑都需要你完整地踩一遍,
iii
而在这个过程中你收获的不仅仅是知识,还可能是友情。
本书内容预览
本书会以工作笔记的形式循序渐进地讲解DBA 工作中的一些常见问题和处理方法。
全书共分为三篇,共15 章,全面介绍数据库管理、架构和SQL 优化、运维开发相关
的工作内容,在这些知识点中也穿插了大量实例。第一篇(第1~5 章)详细介绍了MySQL
的发展,技术选型和体系结构,以运维场景作为切入点,通过梳理SQL 开发规范,总结运
维管理实践来还原DBA 的日常管理工作。
第二篇(第6~10 章)包含SQL 查询优化,并发控制内容和性能测试的一些相关内容,
在这个基础上补充了MySQL 高可用架构和集群相关内容,提供基于业务的架构设计思路。
第三篇(第11~15 章)包含整个运维开发体系从0 到1 的建设思路,包含运维开发
基础,架构设计和规划,运维管理模块设计,自助服务设计等几个部分。
感谢
写书的过程还是比较漫长的,从策划到出稿,整个过程涉及很多的环节和细节,而且
因为个人时间的原因导致进度多次受阻,也犯了很多低级错误和失误。最开始对笔记的梳
理和整合,然后成为知识体系,这个难度比预想的大了许多,书中的技术术语是否得当、
举例和比喻是否恰当等,在书的结构和内容的考量上,我和本书策划编辑荆波老师也反复
进行了讨论和校正。在工作忙碌之余,坚持写技术博客,同时又花费不少时间来编排图书
内容,着实是一件很辛苦的事情,但还是坚持了下来,想到读者能够在我的一些案例中得
到一些启示和帮助,其实是一件很让人欣喜的事情。
当然书的内容质量也离不开朋友们的支持,感谢周彦伟,周军为本书作序,同时感谢
杨奇龙,贺春旸,杨尚刚,卢飞,赵飞祥,陈晨,王伟,房晓乐,贾艳燕,张海林,韩锋
对于部分书稿的审阅,他们是奋斗在一线的DBA 或者技术管理者,在工作中积累了大量
的实践经验,对本书给出了很多宝贵的建议,感谢dbaplus 社群和腾讯云对于图书的支持
工作,在此一并感谢。
完成本书也离不开家庭的大力支持,感谢妻子雪丽给予支持和理解,为此她承担了更
多家庭事务,感谢父母默默地支持我的想法,虽然他们看不懂我写的内容,但是总是会问
问写书的进度。还有我可爱的女儿珊珊,看着她活泼可爱的模样,我理解了陪伴是最深情
的告白。
感谢荆波老师对于本书的大力支持,在所有的环节都严格把关,有了之前的合作,这
一次的合作多了一些默契,能够写成本书,与他的帮助是分不开的。
由于本人知识水平有限,书中难免存在着一些错误和不妥之处,敬请批评指正,如果
您有更多的宝贵意见,也欢迎在我的微信公众号(jianrong-notes)讨论交流,大家一起学
习交流,共同进步。
杨建荣
2019 年6 月
MySQL DBA工作笔记:数据库管理、架构优化与运维开发 pdf下载声明
本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版