开篇词|理论+实践,带你解决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实现应用高可用数据库监控系统搭建等内容。学完这部分内容,你就能够构建起一套基本完善的数据库高可用解决方案了。

写在最后

最后,我想和你分享一下我这些年和各种数据库打交道的个人成长经验,希望这些好习惯能够陪伴你走完这一程的学习之路。

  1. 掌握一门数据库技术,首先需要多实践,从解决身边的问题开始。
  2. 多思考,多总结。将日常处理的问题都记录下来,问题的现象是什么,使用了哪些方法来解决。即使有的问题当时无法彻底理解或解决,也要记录下来,随着知识和经验的积累,将来某一天或许能理解这些问题。
  3. 数据库的官方文档、数据库理论知识、出版的各种数据库应用和运维方面的书籍,都可以拿来学习,养成从数据库官方文档中寻找答案的习惯。对于开源数据,代码本身也可以看作是文档的一部分。

当然,最重要的还是自己有主动学习的意愿,能坚持在相当长的一段时间内,持续学习。最后,我想把罗曼·罗兰的一句名言送给你。

人们常觉得准备的阶段是在浪费时间,只有当真正的机会来临,而自己没有能力把握的时候,才能觉悟到自己平时没有准备才是浪费了时间。

希望我们都能不负好时光!

精选留言

  • ygj64

    2024-08-19 20:43:02

    请问老师文章开头说的数据库连接闪断具体是什么现象
    作者回复

    连接闪断指的是在执行SQL语句的时候,会报类似下面的这些错误。具体的错误信息和使用的客户端驱动也有关系。
    ERROR 2013 (HY000): Lost connection to MySQL server during query

    ERROR 4031 (HY000): The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.

    CommunicationsException: The last packet successfully received from the server was 15,032 milliseconds ago. The last packet sent successfully to the server was 15,035 milliseconds ago. is longer than the server configured value of 'wait_timeout'.

    Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

    2024-08-20 10:13:51

  • Neo

    2024-08-22 20:43:25

    老东家的技术大佬,必须强烈支持👍👍👍
    作者回复

    感谢支持🤝🤝

    2024-08-23 09:19:36

  • 小叶

    2024-12-21 16:41:51

    有5.x升级到8.x的过程吗?去年就搞坏了
    作者回复

    第16讲就是关于MySQL版本升级的,包括从5.X升级到8.0。

    2024-12-23 09:28:14

  • star1988007

    2024-09-01 21:13:01

    老师会有mysql mha部分的讲解吗
    作者回复

    MHA 是没有规划到这个课程中的。

    2024-09-02 10:17:20

  • 水锅

    2024-08-22 00:19:37

    最近把数据库从 5.7 升级到 8.0,相同代码相同访问量下,感觉 CPU 有明显上升了... 网上有找到一些贴子也碰到了相同的问题,但没有解决方案。只有一篇是说 CPU 使用率确实会更高,但吞吐量也会同时上升。但从实际应用的角度,CPU 上升了,带来的直接结果就是如果不升级配置就会出现慢查询... 不知道老师有没有碰到过这个问题。
    作者回复

    我也在网上看到过一些消息,说升级到8.0后性能可能反而有下降。我暂时还没有在同样的业务场景下对比过5.7和8.0的性能。不过这确实是一个很重要的问题,后续得找时间专门做一些性能测试和对比。

    2024-08-23 09:07:11

  • ls

    2024-08-21 14:27:16

    备份恢复会涉及么,特别针对一些比较大的MySQL库
    作者回复

    有的,有专门的几节课讲解全量备份、增量备份,以及数据库恢复的一些方法。

    2024-08-22 08:44:10

  • Goal

    2024-08-21 10:09:03

    加入加入
    作者回复

    欢迎加入👏👏

    2024-08-22 08:34:48

  • Geek_f5f820

    2024-08-21 08:37:45

    老师,我是干运维的,平时没去接触代码,请问阅读源码需要把什么语言学习到什么程度呢
    作者回复

    MySQL主要是用C和C++编写的,阅读MySQL源码的话,C语言要比较熟,struct、指针这些要很熟悉。MySQL8里面用了一些C++比较新的语法、特性,这些其实我了解也不是很深入。一般可以借助GDB,设置一些断点,单步跟踪,这样对理解源码也很有帮助。

    2024-08-21 09:58:40

  • 风萧雨瑟

    2024-08-20 20:50:27

    老师可以讲一下闪断原因以及怎么解决的嘛? 另外能否加一课如何如何调试源码呢?
    作者回复

    数据库连接相关的问题,在第3节课里有详细的分析。

    关于调试源码,可能不单独加一课。我会考虑在合适的地方加一些调试相关的内容。

    谢谢你的建议。

    2024-08-21 10:24:24

  • cheriston

    2024-08-19 20:14:06

    老师的干货多多,多多学习
    作者回复

    感谢支持。后续的内容更精彩:)

    2024-08-20 17:56:36

  • sun

    2024-08-19 20:11:08

    终于开课啦,学起来!
    作者回复

    一起学起来

    2024-08-20 10:04:41

  • 资深嵌入式点灯工程师

    2024-08-19 16:57:36

    开课了,期待老师后续的课程内容
    作者回复

    感谢支持:)

    2024-08-20 17:55:35