书籍作者:杨建荣 | ISBN:9787113260347 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:5115 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书是来自一线MySQL DBA的技能进阶笔记,凝结了作者多年数据库管理心得。
全书从运维管理、架构优化和运维开发三个层面娓娓道来,精心筛选了作者在实际工作
中总结的技巧、对常见问题的处理方法以及对于运维体系的思考和实践;尤其是运维开
发章节从0 到1 构建运维体系,能够对DBA已有知识体系和技能栈做到全新梳理。
杨建荣,技术爱好者,dbaplus社群发起人之一,Oracle ACE,腾讯云TVP,YEP成员。拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优。拥有Oracle 10g OCP、OCM、MySQL OCP认证,对Shell、Java、Python有一定功底。每天通过微信、 博客进行技术分享,已连续坚持2000多天。
ACE,腾讯云TVP,一线数据库专家多年运维经验凝聚成简,全面理解新时代DBA技术转型思路和运维心得
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 月
第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