如何学习MySQL

  • 《高性能MySQL》第四版发布后,收到了很多读者的反馈,其中关注最多的是作为一个初学者,应该如何能够较为系统的学习MySQL,从而应对日常工作或者获得更好的职业发展。于是和多个业内朋友讨论后,整理了一些MySQL学习的推荐资源,供初学者参考。文章末尾有一个MySQL学习交流群,供加入提问与讨论。


    业界专家的经验

    Yangyidba 阿里云的数据库专家

    yangyidba 阿里云数据库专家

    刚刚入行时,有哪些资料给你了帮助?

    正式接触 MySQL 是2011年底,当时的公司的数据库版本主要是 5.5 版本和少量 5.1 版本。因为之前学Oracle的经验是查看官方文档,学习MySQL 资料主要是 “官方文档” 和当时的淘宝DBA团队组织的技术大学的技术分享,学习MySQL技术的技术特性和经典案例。

    其实就现在而言,MySQL 官方文档依然是最好的学习资料和教材, 里面非常详细的说明 MySQL的基础架构,redo,undo,读写逻辑,字段类型,锁,存储引擎,主从复制,MGR ,性能优化等等。把官方文档通读一遍,基本上能超越60-70%左右的DBA,为什么不是更高呢?因为学习技术是为了使用技能。

    进一步了解 MySQL/数据库,是哪些资料帮助了你?

    换个回答的方式,哪些因素帮助我提升数据库技能水平?总结起来大概四个方面

    1. 掌握基础知识之后,会有 “纸上来得终觉浅,绝知此事要躬行”” 的想法。基于对各种MySQL 技术知识点和 功能特性的理解,搭建单节点,主备模式环境 做各种功能测试,并且将知识点的验证或者分析过程下来写博客,比如死锁,能将常见的20个死锁常见分析过程总结下来,相信死锁问题再也难不倒你了。
    2. 如果是第一条是模拟考,那么真实的业务场景则是实战演练,在海量的业务场景下,层出不穷的业务问题和技术难点驱动 DBA 对 数据库的使用和限制了解的更多。比如:
      • truncat表 如何恢复?
      • 如果有500g binlog,如何加速 binlog 应用?
      • 如何删除3T的大表?
      • 秒杀场景下数据库设计和优化?
      • 如何排查业务访问db RT异常?
      • 为什么业务写完立即查询当时查不到?
    3. 和优秀的同事或者优秀的人同行,比如有解决不了的疑惑可以咨询内核开发。

    现在回头来看,哪些资料你觉得是最推荐的,分别对于初入学,和深入学习的人来说?

    对于初学者而言,首要目标是 夯实基础,学好基础/理论知识。

    • 官方文档
    • 《高性能MySQL》
    • 《MySQL性能调优与架构设计》
    • 《MySQL技术内幕:InnoDB存储引擎》

    对于深入学习的人来说, 单独的数据库学习是没有意义的,必须服务好具体的业务场景才能发挥其价值。推荐

    • 《数据密集型应用系统设计》
    • 《性能之巅》
    • 《漫画算法》
    • 学习和总结各种业务场景下的数据库架构设计 ,数据库高可用,容灾,强红包,秒杀,直播弹幕 等等

    业界某匿名数据库大佬

    匿名大佬 数年前阿里P9

    对于初学者,建议自己手动安装常见的架构,比如最简单的一主一备,作为验证环境。 找一些操作案例较多的博客或公众号文章,照着作者的思路执行。

    然后再自己设计一些执行案例,先自己推导结果,再执行验证,在验证过程中加深理解或者勘误。

    内核学习也可以延用这个方法,在验证过程中设想如果是自己实现这个功能的,会怎么写,然后通过阅读源码理解作者的设计思路。就是看源码要带着问题去看,找只要主要流程,GDB去调试单步执行。

    阿里集团DBA团队 Leader

    某陈姓大佬,此为他微信头像

    推荐的重要学习资料包括:

    • MySQL 官方文档
    • MySQL 技术内幕:InnoDB 存储引擎,MySQL 周边组件的文档与源码,percona toolkit、MHA
    • 初学者:丁奇 45 讲、MySQL 官方文档
    • 深入学习:主要还是积累、排错,云数据库相关还是需要看下技术相关的论文。

    推荐书籍

    在开始学习MySQL之前,最好先了解一下什么是数据库,以及一些SQL的基础知识。而后,再以MySQL为一个典型的数据库进行深入学习。MySQL作为当前最流行的关系型数据库,相关的书籍也非常多,这里罗列基本推荐如下:

    文档是最全面和权威的参考,而其他三本都是,根据豆瓣网友打分进行推荐的。第一本《MySQL是怎样运行的》适用于完全的初学者,内容由浅到深。第二本《高性能MySQL》则从“优化”为入口,非常系统介绍了MySQL的架构、优化,是一本非常好的进阶书籍。第三本是《MySQL技术内幕 InnoDB存储引擎》,这本书深入的介绍了MySQL核心组件InnoDB存储引擎,涵盖了数据库的事务原理、调度、物理存储、锁等知识。

    另外,其实MySQL领域还有很多书籍偏重各有不同,这里不一一推荐了。

    《MySQL是怎样运行的》

    这本书于2020年出版,是一本比较新的书籍,整个书籍也是围绕其标题展开《MySQL是怎样运行的:从根儿上理解 MySQL》。这本书最大的特点是,全书有非常清晰的脉络,可以说是由“入门到精通”,书中放弃了一定的完整性(这个可以去看MySQL文档),而是非常接地气的从零开始,用了很多形象的比喻介绍MySQL数据库的各个概念。

    同时,该书籍在每个章节对相关的概念也都进入了非常深入的讨论,例如,关于索引的介绍,从什么事索引、索引的物理结构开始介绍,然后,开始介绍MySQL的索引在查询、排序等场景的使用,最后,再介绍一些常见的索引优化技巧,包括普通索引、前缀索引、覆盖索引等。

    总得来说,这本书是最近几年,面向于初学者非常不错的一本书。

    《高性能MySQL》

    《高性能MySQL》则从“优化”为入口,将MySQL相关的知识点聚合在一起,包括了查询性能优化(SQL优化)、高性能索引、库表结构(Schema)优化等,也包括了服务器配置(硬件和软件)优化、架构优化(包括了复制、只读节点、分片)等,还介绍了部分云服务商的MySQL等内容,是一本非常适合进阶阅读的书籍。

    该书籍的作者、译者,也都是一直活跃在数据库领域第一线的数据库开发者,对于MySQL实践有着非常丰富经验。这也保障概书籍整体质量不错,不仅可以作为系统的阅读使用,也可以作为一个参考手册,可以根据自己工作需要,不定期的翻阅其中的部分章节。

    《MySQL技术内幕 InnoDB存储引擎》

    这本书则以InnoDB为切入点,非常深入的介绍了InnoDB或者说数据库的原理。InnoDB可以说是MySQL最为核心的组件,其原理不仅仅适用于MySQL,也几乎适用于大多数关系型数据库系统。

    具体的,概书籍覆盖的内容包括了MySQL/InnoDB物理存储结构、索引、锁、事务等等。本书底层原理为出发点,帮助开发者理解MySQL行为、特点。

    本书非常适合,对MySQL已经有一定程度了解,又希望更加深入了解其底层实现原理的人,或者是工作中需要对MySQL源码层进行修改或者定制的数据库内核开发者。

    用好MySQL官方文档

    MySQL官方文档可以说是最为权威、更新最为及时、质量也应该是最高的MySQL学习资料了。在早期,市面上还没有那么书籍的时候,我个人也是通过精读MySQL官方文档,以此为深入学习MySQL、甚至是深入学习数据库原理的知识库。

    但是,官方文档为了保证完整性、准确性,会导致其看起来非常冗长、繁琐,有时候则感觉是在隔靴挠痒,偏向于介绍实现方式或原理以及MySQL提供的功能,而不会介绍读者最需要的最佳实践。例如,官方文档会详细介绍每个字段类型和参数详情,但是不会告诉你,哪些字段类型应该多用,哪些字段类型应该少用。

    了解了官方文档的这些特性之后,官方文档阅读的几个要点总结如下:

    • 在阅读MySQL官方文档之前,需要先花些时间了解文档的整体架构,方便后续阅读查阅
    • 在需要了解某个具体MySQL知识点时,建议可以精读MySQL文档
    • 如果希望系统的了解某个MySQL特效的时候,可以完整的阅读MySQL文档
    • MySQL官方文档最新的都是英文的,需要有一定的英文阅读能力
    • 总得来说,多阅读官方文档,虽然刚开始会觉得有些晦涩,坚持下来,你会发现收获巨大

    另外,阅读官方文档也要注意:也正是因为官方文档注重保障完整性、准确性,所以必定会繁琐、冗长,而不怎么介绍最佳实践经验,甚至一些主流的应用等,例如官方文档也只会将内容限定在MySQL本身,而不会包括硬件、软件或者云环境的相关的内容。


    视频/音频资源

    现在也越来越多的人通过视频的方式去在线的学习各类知识,B站上也有一些面相MySQL初学者的视频资源,质量我不太好评价,不过作为文字、书籍的补充学习,看一些视频学习还是非常不错的。大家可以去B站搜索一下“MySQL 初学者”就有很多的相关视频了,质量良莠不齐,需要大家自己甄别适合自己的。

    这里仅推荐一下由极客时间推出的《MySQL实战45讲》。

    丁奇是MySQL领域的资深专家,之前在阿里和腾讯都是MySQL团队的核心开发人员,该课程由极客时间共同打造,所以一方面内容非常深入,结构设计也非常合理,可以帮助读者非常系统与深入的了解MySQL的原理。

    该系列价格也非常便宜,可以说是买不了吃亏、买不了上当,反倒是容易买到自己不能全部看完/听完的懊恼:《MySQL实战45讲》。


    其他资源或者学习方式

    使用Google/Baidu或者ChatGPT

    通常,对于某个非常具体的知识点或者行业/场景最佳实践,在文档中都不会覆盖,但是,因为MySQL的用户量极大,在互联网上也有非常多的分享和讨论,从初阶到高阶,面相各个级别的内容都有,可以说是一个大宝库,用好了也是可以事半功倍的。

    多总结、多分享、多交流

    学习本身通常都是无趣的,如果学习的知识不能够很快的在实际工作中使用,也很容易忘记。另一个非常好的学习方法,不仅仅限于学习MySQL,就是分享很总结。一方面,可以让你系统的把一个知识点了解的比较完整和透彻,也可以帮你更好的记录,大大加深理解与记忆。

    学以致用

    也许你学习MySQL的原因可能只是因为面试、解决一个工作中的问题、增长知识或者只是兴趣,无论是哪个原因促使你学习,动手练习并在工作中使用这些知识,都是非常有效的。如果,你对MySQL或者数据库很有兴趣,那么则建议在当前的公司,找一个与数据库更近的岗位工作,这样自然可以事半功倍。

    MySQL源代码

    MySQL是一个开源数据库,另一个独天得厚的资源是MySQL源代码。不过,MySQL发展的时间已经非常长了,其代码复杂度也比较高,可以考虑从一两个小的模块、小的功能点着手,去学习、验证。

    学术论文

    当如果需要了解某个具体模块的来龙去脉以及设计思想的时候,有时候去查找一些经典的数据库领域论文可以很好的帮助你解决相关的疑问。有一套大部头《Readings in Database Systems》可以作为参考或者开始,不过内容较多,需要花费大量时间,总得来说不太适合初学者。

    多讨论、多学习

    对于不同基础的人,学习的重点和方法是各有不同的,所以本文会列举主要的MySQL数据库的学习资源和方法,读者需要结合自己的实际情况选择合适的方法。如果你有好的经验分享,可以在留言评论谈谈你的经验。

    Leave a Reply

    Your email address will not be published. Required fields are marked *