首先,先给咋们《数据生态--MySQL复制技术与生产实践》这本书来爆个照,它大概长这样!如需购买,可扫描文末的二维码快速直达!
接下来,借助这本书的对话窗口,我想向大家分享一些我在MySQL的学习成长之路上的一些体会与感想,希望或多或少对大家的学习和工作有所帮助!
1. 写这本书的出发点
2019年11月,我们出版了《千金良方——MySQL性能优化金字塔法则》一书。从那以后,身边不断有人问我一个问题:“写技术类的书不怎么赚钱,为什么还要写?”刚开始,我还认真回答,但提问者听到回答之后大多仍然表示不解,后来问的人多了,我索性回答:“为了赚名气!”这个答案简单、粗暴、有效!的确,通过《千金良方——MySQL性能优化金字塔法则》一书,我们小“赚”了些名气,不过对于为什么写书的问题,这不是我的全部答案。现在,借新书发售的机会,我将自己全部的想法写出来,希望能完整、全面地回答这个问题。
督促自己有计划地学习
2018年12月,我们有幸参加了电子工业出版社在北京举办的作译者聚会。聚会上有两位嘉宾的话令我印象深刻:一位来自阿里的安全专家说,他已经出版十余本书了;另一位来自美团的某团队负责人说,他规划要写十余本书。“听君一席话,胜读十年书”,这完全颠覆了我之前对于写书这件事的看法。在此之前,我一直以为,技术图书是写作者不断沉淀工作中所学的知识,量变产生质变的产物。能写出一本书,说明知识的积累已经达到一定厚度,非常不易。在那一刻,我才知道,原来写书这件事,还可以刻意规划,也难怪大拿们能够做到连续数十载一年出一本新书!于是,从那时开始,我们也开始尝试有计划地学习、有计划地写书。
化解繁重的工作和技能精进之间的矛盾
在2018年12月的作译者聚会之后不久,我们再次受邀参加电子工业出版社在杭州举办的作译者聚会。这次聚会上一位嘉宾的话又让我获益匪浅,他说“视野的高度决定了做事的高度”。后来,在他的影响下,我阅读了吴军博士的《见识》一书,其中“西瓜与芝麻”和“不做伪工作者”的故事令人印象深刻。这让我联想到自己以及身边的同事、朋友们,也未尝不是经常做着捡芝麻的事情,沉迷于低效率勤奋而无法自拔,但由于工作时长问题,相当多的人缺少精进的时间和精力。
不少朋友曾经问过我,要如何从零开始学习MySQL,这些人中有刚出校园的实习生、有程序员,也有想从其他数据库开发转向MySQL的。对于这一问题,我一时间也不知如何作答,但问的人多了,一来我不好意思老说自己也不知道如何学习MySQL,二来突然发觉这或许是一个需要有人站出来解决的问题。于是我开始思考,站在MySQL小白的角度,想象需要如何解决他们提出的问题。
经过不断的思考,我慢慢有了一些答案。例如,可以尝试着系统性地研究某个知识点,将其研究透彻,然后分享出来供大家一起学习,以便帮助那些没有足够精力和时间精进的朋友们快速进步,让那些可能走弯路的朋友们少走弯路。或许这就像吴军博士在《文明之光》中所描述的那样,当农耕文明发展到一定阶段,赖以生存的食物不再短缺的时候,就能够腾出一部分人力不再从事农耕劳作,转而专门从事满足新需求的工作,如此这般,人类文明便可以不断向前进步。
系统性地学习和研究某个课题
借用吴军博士的话说,一本书可以看作为系统性学习和研究某个课题的答卷,就好比在大学里写论文一样。它能够证明你学习和研究的课题是否有成效,让大家都可以看见、分享你的学习和研究成果。
锻炼写作能力
写作是一项技能,需要反复地刻意练习,而写书的过程通常是一个高要求、长周期的写作过程,这是一个非常好的练习机会。
2. 掌握正确的学习和研究方法
要系统性地学习和研究一个课题,按照由浅入深的顺序,我们可以将学习和研究的过程大致分为如下三个阶段:
第一阶段:整体认识
当面对一个复杂课题时,可以先从整体上搞清楚它的知识体系组成框架,搞清楚知识体系中各个组成部分(知识模块)的大致脉络,从而对一个复杂课题从全局上建立起一个初步认知,以便为下一阶段选择什么样的知识模块进行深入研究做好铺垫。
第二阶段:逐一深入
基于第一阶段的整体认识,可以优先选择一些工作中需要用到的知识模块、或者感兴趣的知识模块,作为一个个的子课题逐一进行深入的系统性研究。
第三阶段:回归整体
由于人的精力有限,在第二阶段,深入研究各个部分期间,一些知识模块可能会被淡忘,因此,需要回归整体,结合自己的验证与理解,形成稳固的知识体系。
在学习和研究过程中要勤动手记录,后续可整理为博客文章,积累到一定数量之后亦可整理为图书,持续积累,直到形成完善的知识体系为止,日后可供自己与他人反复复用。
2019年11月出版的《千金良方——MySQL性能优化金字塔法则》,可以认为是我们在第二阶段中对一个子课题(关于MySQL性能优化)的答卷,而本书也可以认为是我们对另一个子课题题(关于MySQL主从复制)的答卷。对于MySQL来说,主从复制是一个非常重要的知识模块,而且,据我所知,还有非常多从事MySQL相关工作的同行们,对MySQL主从复制的原理、应用场景等知识掌握得并不够全面,甚至对其一知半解的人也不在少数。因此,在本书中,我们将其作为重点展开介绍。不过,很抱歉的是,在学习和研究的第一阶段中,我们缺少类似的成果,但我们正在积极筹备中,在不久的将来会为广大的读者朋友们交上一份满意的“答卷”!
3. MySQL的数据生态
MySQL的二进制日志记录了一个数据库实例内数据的变更,这些内容是按照时间的先后顺序记录的。根据具体的二进制日志格式选项设置,可以记录数据库实例内执行的原始SQL语句文本,也可以记录数据库实例内执行SQL时产生的数据变更的行记录值。二进制日志可以满足类似如下一些应用场景:
MySQL Server执行崩溃之后的恢复时,作为事务的协调者
一个未完成提交的事务,在MySQL Server执行崩溃之后的恢复时,会在二进制日志中检查是否存在对应的内容,如果存在,则事务可以重新执行提交,如果不存在(或没有启用二进制日志记录功能),则必须回滚事务,将该事务修改的记录进行回滚。
在不同实例间进行数据同步(主从复制、组复制)
主库中的数据变更被记录到二进制日志中,然后主库将二进制日志发送给从库,从库使用这些二进制日志进行回放,模拟主库中执行的操作,从而实现主从之间的数据同步。
数据异地容灾
可以在异地数据中心增加一台服务器,将其配置为新的从库,从主库中获取二进制日志进行回放,达到数据异地容灾的目的;也可以由应用程序模拟一个从库,从主库中获取二进制日志,进行解析、处理,然后将数据存放在容灾专用的系统中。
数据被误删除后的恢复(通常被称为"数据闪回")
通常,对于未提交的事务,事务的ACID特性能够保证数据的一致性,直接使用事务提供的回滚功能即可实现对误删除数据的恢复,不受事务控制的修改语句除外,因为不受事务控制的语句修改的数据无法执行回滚。但事务一旦完成提交,则无法再对数据进行回滚,这时可以对二进制日志中记录的值与条件进行反转,生成新的SQL语句(要求二进制日志以row格式记录,必须记录全镜像,且只支持增/删/改语句的反向操作),然后重新在数据库实例中执行新的SQL语句,从而恢复被误删除的数据。
异构数据库之间的数据流转
二进制日志中记录的是数据的逻辑变更,可以从中提取出数据的纯文本和字段的顺序,然后通过应用程序做一些处理,数据就可以在异构数据库之间流转,这一点是其他大多数数据库软件不具备的特性。
二进制日志独有的特性形成了MySQL数据流动的与循环的基石,在不同应用场景下形成了独特的“数据生态”,这也是本书名字的由来。
4. 读者对象
无论你是MySQL的初学者、数据库架构师及其相关开发人员、非MySQL数据库DBA,还是中高级的MySQL DBA,认真阅读此书,我相信或多或少都能有所收获。
-
如果你是MySQL的初学者、MySQL相关开发人员、非MySQL数据库的DBA,可以从头开始完整学习MySQL的复制技术。
如果你是数据库架构师、中高级MySQL DBA,可以借助本书对MySQL复制技术查漏补缺、扫除盲点。
5. 如何阅读本书
全书分为“基础篇”、“方案篇”、“参考篇”,其中:
-
“基础篇”对MySQL主从复制技术的用途、概念、基本原理以及演进等进行了全方位的介绍。
“方案篇”对MySQL主从复制技术在生产中的应用场景、复制拓扑的生命管理周期、高可用切换与主库故障转移等进行了全方位的介绍。
“参考篇”对MySQL二进制日志的基本组成结构、常见的复制对象在主从复制拓扑中的流转过程等进行了全方位的介绍。
对于初学者、MySQL相关开发人员、非MySQL数据库的DBA,如果时间充足,建议从头到尾依次学习。
对于数据库架构师、中高级MySQL DBA,需要进行查漏补缺、扫除知识盲点,或者在工作上需要查阅资料以快速解决问题,则可以通过目录快速查找所需内容。
如果你具备一定MySQL源码阅读能力,或者想要挑战更高难度,可以结合简书平台高鹏的专栏《深入理解主从原理32讲》进行学习。对该专栏中的内容,高鹏也进行了整理,并出版为《深入理解MySQL主从原理》一书,有需要的读者朋友可自行购买。
6. 致谢
首先,非常感谢给本书作序的大拿:叶金荣老师、熊军、徐轶韬。感谢撰写封底推荐语的大拿:林晓斌(丁奇)、高鹏(八怪)、温正湖、杨奇龙、熊中哲、李春。感谢他们的认可与支持!
其次,非常感谢给本书校稿的朋友们:刘云、董红禹、高鹏。感谢他们的不辞辛苦,反复咀嚼文字,努力寻找书稿中的纰漏,帮助提升阅读体验!
再次,非常感谢参与本书命名讨论的朋友们:李春、董红禹、徐婷、杜蓉、符隆美、孙黎!
最后,非常感谢帮忙为本书推广宣传的叶金荣老师、杨奇龙、田帅萌,以及大力配合我们推动图书出版事宜的电子工业出版社编辑符隆美,以及社里其他负责内容审核、校对、排版的编辑们!
7. 购买链接信息
* 购买链接
https://item.jd.com/12743119.html
戳文末“阅读原文”亦可直达
* 购买二维码:
作者介绍
罗小波:《千金良方——MySQL性能优化金字塔法则》作者之一。
熟悉MySQL体系结构,擅长数据库的整体调优,喜好专研开源技术,并热衷于开源技术的推广,在线上线下做过多次公开的数据库专题分享,发表过近100篇数据库相关的研究文章。现任 ScaleFlux staff application enginner
沈刚:熟悉 MySQL 数据库运行机制,丰富的数据库及复制架构故障诊断、性能调优、数据库备份恢复及迁移经验,为银行、证券以及互联网用户提供数据库方面架构设计、故障诊断、性能调优等服务,现任 PingCAP TiDB 技术支持工程师
来源:oschina
链接:https://my.oschina.net/u/4381796/blog/4701807