前言
MySQL是开源世界里面一颗璀璨的明珠,是最流行的关系型开源数据库。关于MySQL的著作浩如烟海、充栋盈车。如何才能写出一本有特色内容的书呢?本书独辟蹊径,从运维和实践相结合的角度,分专题和知识点逐一讲解。用源码去解释MySQL的知识点,分析碰到的问题,这就是本书的特色。
本书内容所涉及的知识点的选择,建立在我们多年工作经验的基础之上。在平时维护MySQL的过程中,觉得需要引起注意或需要弄清楚的,就把它分享出来,希望能管中窥豹,帮助到读者朋友。
本书总体分三个部分。
第一部分是MySQL。
在这一部分中,我们介绍了MySQL大部分常见知识点的概念和原理,以及运维经验。所谓源码面前,了无秘密。我们从MySQL源码入门开始,介绍源码结构、启动过程、创建连接、表对象缓存等,希望读者在研究MySQL的时候,能充分借助MySQL源码开源的优势,从源码出发,深入理解MySQL的精髓。当然,限于篇幅,我们只能抛砖引玉,适可而止。期望聪明的读者能打好基础,登堂入室。
本部分会重点介绍InnoDB的相关概念,从源码目录结构,到InnoDB体系架构及其数据字典、数据存储结构、索引的实现原理、两次写(DoubleWrite)、日志管理机制、InnoDB记录格式等,都进行了深度的剖析,这块内容比较复杂,也凝聚了我们巨大的心血,期望能帮助读者理解其中的相关概念。
随着MySQL 5.7的成熟及MySQL 8.0的发布,一大波MySQL新技术迎面扑来,我们也不会放过这次学习的机会。值得称道的是,本书中包含了来自两位MySQL官方团队的专家特地给我们供稿的内容,分别详细讲述了MySQL对JSON的支持:MySQL Group Replication和MySQL Document Store。另外,我们也关注了MySQL的GTID、SYS Schema、Semi-Sync Replication等,通过对它们详细的描述,相信本书能为广大读者在快速熟悉和掌握MySQL新版本中出现的功能的学习助上一臂之力。
在讲述各个知识点的同时,也会结合工作过程中的一些经验,跟大家分享自己的心得,例如我们详细介绍了Percona XtraBackup,也分享了在使用它的过程中碰到的问题。类似地,还有快速删除大表的案例、死锁的案例、处理很多文件时碰到的问题等。
最后,值得一提的是,我们还结合各个知识点,对MySQL如何保障数据库安全做了比较详细的总结,希望这会改变人们对开源数据库是否可靠这样问题的一些有争议的看法。
第二部分是Galera。
Galera是去哪儿网架构MySQL高可用的技术基础,我们选择了以Galera Cluster为基础的Percona XtraDB Cluster为技术原型,自主研发了针对去哪儿网这种以交易为主需求的电子商务网站的MySQL高可用架构方案,目前已经在线使用了三年,可能也是国内最大的Galera集群,我们也很荣幸能成为MySQL集群化的早期践行者。
本部分首先介绍了Galera Cluster的设计与实现,让读者能从宏观层面理解它。当然,虽然说是宏观,但是根据本书写作的主导思想,也不免会从源码的角度去剖析其架构、理解其精华。Galera提供了非常丰富的参数让使用者去灵活地设置,我们也做了重点介绍和解析。
在准备工作完成之后,开始讲述Galera的重要知识点:验证方法、消息传送、GCache实现原理、SST/IST细节、Donor/Desynced详解、并发控制、FlowControl及grastate.dat文件揭秘等。仔细研读了这些内容之后,相信读者对Galera的理解会更上一层楼。
实践是本书的另一个特色。所以在Galera部分也加入了不少的实践案例,例如业务更新变慢的根由溯源、手动构建集群死锁、从库的转移等,通过这些内容分享工作中的一些心得,希望读者能够从中受益。
第三部分是Inception。
这是我们从零做出来的一个开源项目。Inception已经开源,其手册也已经在网络上广泛传播,而本书所要讲述的,更是对Inception的一种理解,以及它的意义和设计理念。
关于它的诞生、安装与使用,以及支持的选项、结果集和命令集等,我们都会介绍。同时,值得注意的是,我们特地安排了一节Inception的彩蛋,里面讲述了几个Inception的特殊功能,它们已经成为了日常工作中不可或缺的重要工具。
如何阅读本书
基于本书的目的,不是为了帮助你了解整个数据库的所有内容,如果想要了解整个MySQL数据库的所有内容,在线手册无疑是最好的帮手。而本书只关注了在工作中总结出来的对工作有用的重点内容。所谓的重点内容很多,它们之间可以不相关,也可以相关,所以行文组织是比较自由的,相应的阅读模式也可以比较自由。
书中的MySQL部分,其讲到的案例都是非常独立的,与其他章节没有什么关系,所以可以采取跳跃式阅读。对于一些讲述原理的内容,如果不同章节中有相关联的部分,在内容中都会有类型参照关于“某某某”的内容来引导阅读,所以也不需要刻意遵守章节顺序。
书中的Galera部分,大部分是在讲述它的实现原理,对于这些内容,最好是按照书中的顺序阅读,这样才可以最好、最快速地理解它们。而后面会讲述一些操作方法及案例等内容,都是基于前面的原理的,案例之间没有相关性,可以采取跳跃式的阅读方法,找到自己感兴趣的内容。
书中的Inception部分,讲述了如何诞生、如何使用、如何设计及所支持的功能等内容,这基本也是有顺序的,建议按照书中顺序来阅读。
读者对象
如果你是一名技术管理者,期望本书能帮你建立对MySQL数据库的信心,助你完成数据库方向的技术体系建设,同时也能帮助你了解MySQL的原理和架构。其中的知识要点,如果在面试中使用的话,应该能帮你找到你所渴求的那
1% 的顶尖人才。
如果你是一名架构师,期望本书能帮你在MySQL架构上大显身手,本书中介绍的MySQL
Replication、Semi-Sync Replication、Group Replication、Galera
Cluster,几乎囊括了所有MySQL架构的基础,一定有一款适合你。
如果你是一名开发者,期望本书能帮助你在开发过程中,充分理解MySQL的原理,设计出合理的数据库表和索引,更好地利用MySQL的优势,避开MySQL的劣势,合理使用这个优秀的开源数据库。
如果你是一名DBA,那么真心恭喜你,本书的知识能助你成为那1\%的顶尖人才。
勘误和支持
由于我们对MySQL及相关技术的认知水平有限,以及在书写过程中可能存在一些疏忽,书中可能还存在一些不尽如人意的地方,或是不够完美还需要改进的地方,抑或是存在一些错误等问题。我们希望广大读者朋友们能指出其中的问题并留下您的宝贵建议或意见,我们会不断改进,不断完善,在此先感谢大家。
如果有朋友有任何关于本书的问题,或者建议意见等,想要与我们联系,可以发邮件到
[email protected],我们会尽己所能及时回应大家。
我们会在我们的公众号上随时发布本书勘误细节和最新技术进展,同时也会把相关重要意见不定期地结集发布,为了保持随时沟通并获取最新的改进资料,可以扫描右侧二维码关注我们的公众号:formysql。
在我们学习和使用MySQL的过程中,个人知识和经验的积累及解决问题的思路大部分都来自朋友们的指点和教诲,我们要感谢帮助过我们的朋友们,特别是一起参与ACMUG社区活动的朋友们,限于篇幅,我们不能点名逐一致谢,就以ACMUG代替吧,感谢ACMUG。
特别地,感谢为本书作推荐的作者:甘泉先生、王瀚漓先生、韩朱忠先生、盖国强先生、刘启荣先生、田发明先生、彭立勋先生、金官丁先生、叶金荣先生、祝百万先生、姜承尧先生、阳学仕先生,诸位师长和朋友的倾情推荐给了我们巨大的信心和勇气,我们表示衷心的感谢。
由于我们几人出身工科,文字功底粗陋,同时在技术上也不可避免地破绽百出。这里要特别感谢参与本书校对的李坤、田丽芳、高岩,是他们不厌其烦的耐心核对和明察秋毫的细心校正,才使得本书不至于佶屈聱牙、不堪卒读。
最后,感谢本书的读者,你们的支持是我们最大的动力,谢谢你们!