前言
从2017年开始,笔者所在的公司开始大量上线MySQL 5.7基于GTID的主从构架,在实际的运维工程中,产生了不少问题和疑惑,比如:
· 主从延迟为什么瞬间跳动?
· 延迟为0就一定代表没有延迟吗?
· 从库能和主库一样利用索引吗?
· MTS是如何提高从库应用效率的?
· mysql.gtid_executed表在从库初始化的时候扮演什么样的角色?
我们开始结合源码来解决问题并解除疑惑。慢慢地,整个主从体系越来越清晰,我们的经验也越来越丰富,为了将这些积累的知识和经验分享给更多的人,笔者决定撰写本书,这是本书由来的第一个原因。
从MySQL 5.7.17开始,MySQL官方推出了MGR高可用构架,MGR是未来MySQL高可用构架发展的方向,它和主从有着天然的联系,比如GTID、Event、SQL线程等基本都是通用的,要深入学习MGR,必须先深入学习主从原理。为了让广大读者能够打好学习MGR的基础,我更加坚定了撰写本书的想法,这是本书由来的第二个原因。
在MySQL 开源领域,人才济济、高手如云,优秀的著作比比皆是,比如最近我的朋友罗小波、沈刚著的《数据生态:MySQL复制技术与生产实践》就是一本优秀的与MySQL主从相关的书籍,书中的案例可作为本书的补充。我希望以本书为载体和广大的MySQL爱好者互相交流、互相学习、共同进步,这是本书由来的最后一个原因。
讨论范围
笔者从2018年开始着手撰写本书,到2019年中旬初稿完成。在笔者开始学习的时候,MySQL的主流版本还是MySQL 5.7,因此本书的所有代码均限定在MySQL 5.7.22这个版本。现在回想整个撰写过程,比我想象的要艰难很多,消耗了我大量的时间和精力。还好有朋友和同事的支持,最终基本完成。由于精力有限,本书不包含半同步部分,实属遗憾,如果需要了解半同步部分可以访问笔者的博客。本书主要讨论范围如下:
· 源码版本 MySQL 5.7.22。
· 不覆盖半同步。
· 只考虑参数master_info_repository和参数relay_log_info_repository设置为TABLE的情况。
· 只考虑参数binlog_format设置为ROW的情况。
术语约定
· 行格式:参数binlog_format设置为ROW。
· 语句格式:参数binlog_format设置为STATEMENT。
· binary log:代表binlog物理文件。
· order commit:代表MYSQL_BIN_LOG::ordered_commit函数,因为本书中使用频率较高,所以做了简化。
· GTID AUTO_POSITION MODE:代表主从使用的是GTID,同时设置了master_auto_position=1。
· POSITION MODE:代表主从使用的是传统位点方式。
· GTID MODE:代表主从使用的是GTID,但是没有设置master_auto_position=1。
· 单SQL线程:用来和MTS进行区分,代表只有一个SQL线程进行Event的应用。
· MTS:Multi-Threaded Slaves的简称,包含一个协调线程和多个工作线程,Event由工作线程应用。
本书结构
深入学习主从原理,需要按照一定的顺序学习,如果不知道GTID、不知道Event、不知道主库如何生成Event,那么肯定不能深入理解主从原理,因此本书按照这种顺序进行讲解。本书一共分为5章,前4章应该作为一个整体顺序阅读,第5章和前4章没有关联,可以独立阅读。
· 第1章:介绍GTID相关的知识点,包含GTID的构成、GTID模块的初始化、GTID中的运维等知识点。
· 第2章:介绍binary log中的主要Event,从作用、格式讲解、实际解析等几个维度讲解各个Event。
· 第3章:介绍主库是如何生成Event的,以及DUMP线程是如何通过GTID进行主库binary log定位,并且进行Event传输的。
· 第4章:介绍从库是如何应用Event的,并且还包含了推荐的参数设置和Seconds_Behind_Master延迟的相关知识点。
· 第5章:本章作为知识拓展,讲解线程的初步知识、MDL Lock、排序等热门话题,还包含了与主从相关的案例。
目标读者
· MySQL DBA。
· MySQL源码爱好者。
致谢
感谢业内众多MySQL专家在百忙之中为本书做推荐序,他们是翟卫祥、温正湖、桑栎、叶金荣、吴炳锡、王伟、黄炎、王英杰、冯光普、李大玉、李真旭、杨建荣、杨奇龙、徐晨亮。
感谢北京中亦安图科技领导黄远邦为本书做封底序。
感谢我的同事戴正勇、杨海波、田兴椿、邹启建,没有你们的帮助和支持,本书不可能完成。
感谢电子工业出版社的孙学瑛编辑对我写作的支持,她严谨的态度让人钦佩。
感谢我的父亲高祖恒,妻子颜蕾和两个可爱的儿子,感谢你们的支持,你们的支持是我最大的动力,我爱你们。
读者反馈和勘误
由于笔者能力有限,书中难免存在一些错误和不妥,敬请批评和指正。如果您有更多宝贵的意见,请通过如下方式进行联系和反馈。
邮箱:gaopp_200217@163.com