开篇词 理论+实践,带你解决90%以上的MySQL运维问题
你好,我是俊达,欢迎你加入到《MySQL运维实战课》的学习中,和我一起探索数据库的奥秘。
我先来介绍一下我自己,2009年我曾作为Oracle DBA加入了淘宝网的DBA团队,负责支持多个业务线的数据库需求。后面因为去IOE战略,我又参与了从Oracle到MySQL的数据库迁移。从Oracle转变到MySQL,是当时的一股风潮,开源数据库MySQL就是在这个时间段开始崛起的。而我在负责迁移到MySQL的过程中,也遇到了不少问题。为了解决这些问题,我开始研究MySQL代码实现。
后来,我又转战支付宝,还是和MySQL打交道,负责构建MySQL的运维体系。无论是前期作为淘宝网的开发DBA,为业务发展提供数据库支持和稳定性保障,还是后期在支付宝负责整个数据库的运维,都让我对MySQL的应用和研究更进了一步。
2013年,我开始支持阿里云RDS产品的运维工作,主要负责MySQL和SQL Server这两个数据库引擎。RDS产品的开放性带来了新的挑战,当时就有一个比较棘手的问题——数据库连接闪断,这个问题有偶发性,背后原因多种多样,而且有的客户对数据库连接闪断的容忍度非常低。
为了解决这个问题,我们需要构造测试案例重现问题。再使用tcpdump、wireshark等工具分析网络协议包,定位问题。然后根据问题的类型,找到对应的配合团队,推动问题的解决。可以说非常耗时耗力,而且这类问题不在少数,不过也正是这些千奇百怪的问题让我掌握了更多MySQL相关的运维知识。
2016年,大众创业,万众创新,我也加入了初创的袋鼠云。袋鼠云后来也成立了子公司云掣科技,专注于可观测运维,致力解决企业上云难、用云难、管云难三大问题。我也有机会将之前在阿里积累的数据库运维方面的经验,直接服务到客户。
如何学好 MySQL 运维?
在我的这段职业生涯中可以看到,去IOE战略之后,MySQL一直是我工作中的重心,这也间接地反映了一直以来的行业大趋势。到现在为止,MySQL仍然是最受企业和开发者欢迎的开源数据库,根据2022年Slintel网站的统计数据,MySQL市场份额占比仍在43.04%,2022年中国开发者调查报告数据中也显示我国73%的开发者都在使用MySQL。
可以说,MySQL是世界上最流行的开源关系型数据库之一,在各个行业中的使用非常广泛。MySQL和InnoDB高性能的事务实现、数据复制技术,能满足很多行业对于数据库性能和数据可靠性的要求。
虽然近几年在信创大潮的影响下,很多企业开始使用国产数据库了,但实际上国产数据库以及各大云厂商提供的RDS中,也有相当一部分是在开源MySQL的基础上演化而来的。只要你愿意,就可以通过阅读和调试MySQL源代码,从底层实现上,深入理解关系型数据库的实现原理。不同的关系型数据库,在理论支撑和底层实现上,很多方面都是相通的。从MySQL中学到的知识和方法,也能帮你更好地上手其他任何一款数据库。
所以如果你问我怎样快速上手数据库运维工作,那我可以很肯定地告诉你,学习MySQL,学好MySQL。我说的学好,并不仅仅是能够解决日常工作中的问题,而是像刚才说的要了解背后的原理,知其然并知其所以然。
比如我们在日常工作中常见的乱码问题,除了要知道乱码常见的五种情况,还要了解其中涉及的数据编解码原理,又比如内存溢出问题,背后涉及的原理就是流式处理与非流式处理的差异。所以我们课程中不仅会覆盖数据库运维工作中90%的常见问题和坑点,还会更进一步揭示问题产生的原因。
看上去我们是解决了很多单点问题,但实际上所有单点问题的解决最终都会帮助我们串起MySQL的学习网络,而底层原理就是帮助我们把单点问题连接起来的关键。后面你在工作遇到类似的问题,就可以快速地抓住本质,举一反三,摆平一大波问题。
为了让你更好地在实践中学习,我在课程中还设置了大量生产环境中的例子。比如我会提供一个真实的故障案例,带你学习排查MySQL和Linux问题,在学习优化器和执行计划的基础知识后,我会给你提供从真实系统中总结出来的10类SQL性能问题和解决方法。
而我们的课程也将基于最新的MySQL 8.0版本展开,我会手把手地教你应用8.0中的 Clone 插件、组复制等新技术,让你在不影响业务的前提下平滑升级MySQL。还有课程中对MySQL内部实现的描述,都来自于我对8.0.32版本源码的大量阅读和跟踪调试,希望能够帮助你更好地理解和掌握MySQL。
课程设计
为了达到这个目标,我把课程的内容分为四个章节。
第一章 基础运维篇
这一章我会讲解使用MySQL过程中你可能会遇到的最基本、最常见的一些问题。从MySQL安装部署开始,到基本的用户和权限管理、数据库参数配置、表结构设计、常见问题排查和解决,在实践中带你逐步入门MySQL运维。
第二章 SQL 优化篇
SQL优化是数据库性能优化的核心内容,SQL性能不佳,数据库配置再高也没用。所以这一部分我会带你从根本上了解影响SQL语句执行效率的因素,理解MySQL优化器的工作原理,并结合实际业务场景中10类真实案例,掌握SQL优化这一核心技能。
第三章 InnoDB 存储引擎篇
InnoDB存储引擎是MySQL实现高可靠、高并发、高性能的核心组件。如果没有特殊情况,我们一律使用InnoDB表,这样做更加安全高效。课程的这一部分我们将聚焦InnoDB存储引擎的底层原理,从物理存储、内存结构、数据可靠性保障到InnoDB锁,让你做到知其然,并知其所以然。
第四章 高可用篇
数据库的可用性直接影响了整个业务系统的可用性,所以课程的最后一部分我会给你详细讲解实现MySQL数据库高可用的技术,包括数据复制技术、数据库备份和恢复、使用ProxySQL实现应用高可用、数据库监控系统搭建等内容。学完这部分内容,你就能够构建起一套基本完善的数据库高可用解决方案了。
写在最后
最后,我想和你分享一下我这些年和各种数据库打交道的个人成长经验,希望这些好习惯能够陪伴你走完这一程的学习之路。
- 掌握一门数据库技术,首先需要多实践,从解决身边的问题开始。
- 多思考,多总结。将日常处理的问题都记录下来,问题的现象是什么,使用了哪些方法来解决。即使有的问题当时无法彻底理解或解决,也要记录下来,随着知识和经验的积累,将来某一天或许能理解这些问题。
- 数据库的官方文档、数据库理论知识、出版的各种数据库应用和运维方面的书籍,都可以拿来学习,养成从数据库官方文档中寻找答案的习惯。对于开源数据,代码本身也可以看作是文档的一部分。
当然,最重要的还是自己有主动学习的意愿,能坚持在相当长的一段时间内,持续学习。最后,我想把罗曼·罗兰的一句名言送给你。
人们常觉得准备的阶段是在浪费时间,只有当真正的机会来临,而自己没有能力把握的时候,才能觉悟到自己平时没有准备才是浪费了时间。
希望我们都能不负好时光!
- ygj64 👍(3) 💬(2)
请问老师文章开头说的数据库连接闪断具体是什么现象
2024-08-19 - Neo 👍(1) 💬(1)
老东家的技术大佬,必须强烈支持👍👍👍
2024-08-22 - 小叶 👍(0) 💬(1)
有5.x升级到8.x的过程吗?去年就搞坏了
2024-12-21 - star1988007 👍(0) 💬(1)
老师会有mysql mha部分的讲解吗
2024-09-01 - 水锅 👍(0) 💬(2)
最近把数据库从 5.7 升级到 8.0,相同代码相同访问量下,感觉 CPU 有明显上升了... 网上有找到一些贴子也碰到了相同的问题,但没有解决方案。只有一篇是说 CPU 使用率确实会更高,但吞吐量也会同时上升。但从实际应用的角度,CPU 上升了,带来的直接结果就是如果不升级配置就会出现慢查询... 不知道老师有没有碰到过这个问题。
2024-08-22 - ls 👍(0) 💬(1)
备份恢复会涉及么,特别针对一些比较大的MySQL库
2024-08-21 - Goal 👍(0) 💬(1)
加入加入
2024-08-21 - Geek_f5f820 👍(0) 💬(1)
老师,我是干运维的,平时没去接触代码,请问阅读源码需要把什么语言学习到什么程度呢
2024-08-21 - 风萧雨瑟 👍(0) 💬(1)
老师可以讲一下闪断原因以及怎么解决的嘛? 另外能否加一课如何如何调试源码呢?
2024-08-20 - cheriston 👍(0) 💬(1)
老师的干货多多,多多学习
2024-08-19 - sun 👍(0) 💬(1)
终于开课啦,学起来!
2024-08-19 - 资深嵌入式点灯工程师 👍(0) 💬(1)
开课了,期待老师后续的课程内容
2024-08-19