前 言
毋庸置疑,开源数据库MySQL是当今最流行的关系数据库系统之一,无论是在国内还是国外,都具有极高的人气。据统计,在2019年的全球数据库市场中,MySQL以接近40%的使用率高居榜首。在此前提下,作为基础技术支撑的核心组成部分,保持MySQL数据库的高可用性变得极为重要。这是我写这本书的第一个原因,希望读者在构建自己的MySQL高可用环境时,本书能提供一定的参考和帮助。
网上关于MySQL的资料比比皆是,但大部分都是针对单一具体问题的解答,例如如何配置MySQL双主复制等,全面系统讲述MySQL高可用这方面的资料并不多见。而且,这些资料大多只给出简单的实现方法,缺少相应的理论背景知识和分析验证过程。这是我写这本书的第二个原因,希望能填补缺口,让读者不但知其然,也知其所以然。
从2000年至今的20年里,我一直从事各种数据库相关的应用开发和管理工作,尤其是近年来一直跟MySQL数据库打交道。从最简单的单实例,到各种复制,再到集群以及与中间件的配合,在其使用上积累了一些经验和心得。这是我写这本书的第三个原因,希望将它们加以归纳和总结,汇集成书与读者分享。
本书内容
全书共16章,从复制、中间件、集群、存储、优化五个方面介绍MySQL高可用技术。
第1~6章讲述MySQL的复制,是MySQL高可用实现的基础。除了包括原生的异步复制、插件实现的半同步复制,以及MySQL 5.7版本引入的组复制等基本复制技术外,还讨论了几种常见的复制拓扑,以及各种复制的性能对比。在实际应用中,GTID、部分复制、延迟复制都是针对不同场景下常用的与复制密切相关的技术,这部分内容会分别用单独的章节加以说明。
第7~12章给出如何使用中间件构建MySQL高可用环境。具体包括MySQL自己的中间件产品Router和Fabric,以及被广泛采用的MMM、MHA、Keepalived + LVS、Heartbeat + HAProxy等第三方MySQL高可用解决方案。每种产品使用一章的篇幅进行讲解。
第13~14章介绍两种MySQL集群:InnoDB Cluster和Galera Cluster。其中InnoDB Cluster是MySQL官方推出的集群产品,而Galera Cluster是包含在MariaDB中的MySQL多主集群。
第15章讲述利用DRBD技术实现MySQL高可用。前三部分介绍的MySQL高可用解决方案都是基于MySQL自带的各种复制技术。DRBD的实现方式则完全不同,它本身与MySQL复制毫无关系,而是一个用软件实现的镜像块设备内容的存储复制解决方案。
在全书最后的第16章,引入四个MySQL高可用环境下的优化案例,分别是:快速生成数字辅助表;将MySQL去重优化到极致;重叠时间段问题之算法优化;快速安全删除大表。严格来说,本章内容并不特指高可用环境下的优化。但这些案例都取自我工作中的真实需求,具有一定的代表性和实用性,既有利于读者借鉴解决实际问题,同时在某种程度上也能增加阅读的趣味。
为力求严谨,书中所涉及产品或技术的知识绝大部分来源于相应的官方文档。正如Linus的那句话:“Talk is cheap,show me the code”,对于每一个过程或结论,都配有详细的实验步骤,用实例辅以佐证,帮助读者加深理解。
源码下载
本书示例源码请扫描右边二维码下载。如果有问题和建议,请联系booksaga@163.com,邮件主题为“MySQL高可用性实践”。
读者对象
本书所定位的读者是DBA、系统管理运维、应用程序开发、架构师等MySQL相关的技术人员。所有的描绘场景与实验环境都是基于Linux操作系统的虚拟机。本书的读者应具有一定的SQL、MySQL、Linux基础。
致谢
在本书编写过程中,得到了很多人的帮助与支持。首先要感谢我所在的公司——优贝在线提供的平台和环境,感谢同事们工作中的鼎力相助。没有那里的工作氛围和团队,也就不会有这本书。感谢清华大学出版社图格事业部的老师和编辑们,他们的辛勤工作使得本书得以尽早与读者见面。感谢CSDN提供的技术分享平台,给我有一个将博客文章整理成书的机会。最后,感谢家人对我一如既往的支持。
由于水平有限,错漏之处在所难免,希望读者批评指正。
编者
2020年5月