前言
译者序
MySQL 是世界上最受欢迎的开源数据库,她拥有相当大的装机量。而且DB-Engines 的排名一直处于数据库总榜第二名的位置,仅次于Oracle。MySQL 在开源领域排名第一,而第二大开源数据库PostgreSQL的分数仅仅是MySQL 的零头。
MySQL 拥有庞大的用户群,国外的有Facebook、Flickr、eBay 等,国内的有阿里、腾讯、新浪、百度等。而这些互联网和大部分传统公司的服务需要7×24 小时连续工作。当此类型网站的部分数据库服务器宕机时,就需要高可用技术将流量牵引至备份主机,从而对在线业务产生尽可能少的影响甚至没有影响。
此时这些公司需要通过备份和恢复手段来产生备机,并通过复制来同步主备机间的状态,同时部署各种监控软件来监控服务器状态。当异常数据库服务器宕机时,通过手工或自动化手段将主机流量切换至备机,这个动作叫作failover。而一些大型公司在面对成千上万台MySQL 服务器时,通常使用自动化运维脚本或程序完成上述种种动作。本书解决的是MySQL 高可用问题,并围绕着高可用问题从复制、备份恢复、监控和自动化运维4 个方面的知识点入手。无论你的应用是迷你型的博客型应用,还是BAT 这种超大型互联网应用,本书所涵盖的知识点均适用。
接触上一版的时候还是2010 年,转眼5 年过去了,MySQL 也从5.1 升级到5.6,运维工具和运维方式都有较大的变化。第二版也与时具进地增加了一些实用性章节,本书是了解和学习MySQL 高可用技术相对来说较为经典的一本好书。在翻译过程中,我们努力体现原作者想表达的意思,但由于水平有限,有些遣词造句还是无法达到“信达雅”,且疏漏在所难免,恳请读者批评指正。我的微博:,可随时与我联系。这本书还是由唐李洋和我共同翻译,翻译过程由于工作原因拖延不少时间,感谢张春雨和刘舫几位老师的辛苦工作和耐心等待。还要感谢我在平安的同事,汪洋、王鹏冲、张建龙、黄建蝉、王强、张阳,啥都不说了。最后感谢我的爱人王新,女儿宁悦晗,还有3 个月后见面的家庭新成员。
宁青
2015 年8 月27 日于深圳观澜
第2 版序
2011 年,Pinterest开始发展起来。有人说我们比目前其他任何创业公司的发展都要快。刚开始,我们每天都要面临一个新的扩展性瓶颈,它会拖慢整个网站甚至搞垮一切。还记得我们无论去哪里都要带上笔记本电脑,那时我们的脑子里深深刻印着那些停机警告的短信声音。
当基础设施不断地被逼到极限的时候,你就不得不寻求另一种简单的出路。在成长的过程中,我们尝试了至少5 种广为人知的数据库技术,它们都声称能够解决我们所有的问题,可每一次都灾难性地失败了,除了MySQL。那是2011 年9 月,我们决定从头再来。我们用MySQL、Memcache和Redis对一切进行了重新设计,只有三个工程师而已。
MySQL ?为什么是MySQL ?对每一种技术,我们都考虑了其最大关注点,并提出同样的问题。下面是我们对MySQL 的考虑:
它解决了我们的存储需求吗?没错,我们需要映射、索引、排序和blob 存储,这些MySQL 都有。
它常用吗?你可以招聘到相关员工吗?MySQL 是目前生产线上最常使用的数据库之一。很容易招到使用过MySQL 的人,我们可以到帕罗奥多市外走走,大喊我们需要MySQL 工程师,就会冒出来好几个。这可不是开玩笑的。
它的社区活跃吗?非常活跃。有好多非常棒的书籍,和一个强大的在线社区。
面对故障,它健壮吗?即使在最恶劣的情况下,我们也从来没有丢失过数据。
它的扩展性如何?就它本身来说,只是一个很小的组件。我们需要一种上层的分片方案(这完全是另一个问题)。
你会是最大的用户吗?不,目前不是。最大的用户包括Facebook、Twitter 和Google。除非你能够改进一种技术,否则你不会想要成为它最大的用户。如果你是最大的用户,你会碰到一些新的扩展性问题,而其他人根本没机会遇到。
y 它的成熟度如何?真正的区别在于成熟度。根据复杂度的不同,成熟度就好比衡量完成一个程序所需的血、汗和泪。MySQL 的确复杂,但可比不上那些神奇的自动集群NoSQL方案。而且,MySQL 拥有28 年最好和最聪明的贡献,来自于诸如Facebook 和Google 那样大规模使用它的公司。根据我们的成熟度定义,在我们审查的所有技术中,MySQL 是一个明智的选择。
有好的调试工具吗?作为一个成熟的产品,你当然需要强大的调试和分析工具,因为人们很容易遇到一些类似的棘手情况。比如你可能在凌晨三点遇到问题(不止一次)。相比用另一种技术重写一遍熬到凌晨六点,发现问题的根源然后回去睡觉舒服多了。
我们调查了差不多10 种数据库技术后发现选择MySQL是一个明智的选择。MySQL很棒,但它好比不给你任何行李就把你丢到目的地,让你不得不自食其力。它运行顺利的时候你可以连接到它,但一旦你开始使用它进行扩展,问题便开始满天飞:
我的查询执行很慢,怎么办?
我是不是应该启用压缩?怎么做呢?
扩展有哪些方法?
怎样复制?主- 主复制(master-master replication)怎样?
复制停止了!怎么办?
持久性(durability,即fsync速度)有哪些选项?
我的缓冲区应该设为多大?
mysql.ini 文件里有那么多选项,它们是什么意思?应该怎么设置?
我刚刚不小心写到slave 里面去了!怎么防止下次发生同样的事情?
如何防止不带where子句的update命令执行?
应该用什么调试和分析工具?
要使用InnoDB、MyISAM或者其他存储引擎吗?
虽然可以通过在线社区查到问题答案、找到范例、修复漏洞,以及提供解决方法,但通常缺乏强大的凝聚力,而关于架构的深层讨论更是寥寥无几。我们已经知道如何小规模地使用MySQL,但这种规模和步调简直是在开玩笑。本书可帮助我们更深刻地了解MySQL。
MySQL 5.6 有一个新特性,即全局事务处理(Global Transaction Handlers),为复制树(replication tree)中的每个事务添加一个唯一标识。这个新特性使故障转移和slave 提升变得容易很多。为此我们等了太久,终于在新版本中很好地实现了。当我们采用分片方案进行重大的重构时,关于架构决策问题我们参考了本书,比如复制技术和拓扑、数据分享方案、监测、调整以及云相关的问题等。它让我们更深刻地理解了MySQL 的底层运作,使我们更加了解了高级查询、访问模式、使用什么结构,以及之后的重复设计。时至今日,MySQL 架构仍然为Pinterest的核心数据服务。——YashwanthNelapati和Marty Weiner
Pinterest
2014 年2 月
第1 版序
关于复制(Replication)的研究很多,但其中的大多数研究成果都没有得到应用。相反,MySQL 复制已经被广泛部署,但其原理并不为大多数人所知,本书将改变这种状况。本书中介绍的内容比较适合以下人群:愿意阅读大量的源代码,而且在生产环境中花很多时间进行调试,能够在深夜会议中探讨这些内容的人。
复制允许在出现不可避免的故障的情况下提供高可用的数据服务。故障的原因很多,包括磁盘、服务器或数据中心的故障。即使所有硬件都是完美无缺且完全冗余的,还有人为因素的影响。例如,数据库表可能被误删,应用程序可能写入了不正确的数据等,总会有偶然故障发生。但通过合理的准备工作,可以保证从故障中恢复,关键是冗余和备份。MySQL 复制支持冗余和备份。
但MySQL 的复制并不仅限于支持故障恢复,它还频繁用于读操作的横向扩展(scaleout)。MySQL 可以实现大量服务器的高效复制。对于那些读频繁的应用,在商用硬件上支持大量查询是一个低成本且有效的策略。MySQL 复制还有其他有用的应用。在线数据定义语言(DDL)是关系型数据库管理系统中非常复杂的一个特性。MySQL 不支持在线DDL(5.6 版本已经支持),但通过使用复制,往往可以足够好地部分实现它。如果有创意,还可以使用复制做更多的事情。复制是使得MySQL 如此广泛流行的特性之一,它允许将流行的MySQL 原型转换为成功的商业关键部署。复制主张简单和便于使用,这一点和MySQL 十分相似。然而,在生产环境中运行得往往不够完美。本书解释了成功使用MySQL 复制所必须知道的内容,帮助读者理解复制是怎样实现的,哪些地方可能出错,怎样防止问题的出现,以及怎样在问题出现的时候解决它们——尽管你已经很努力地避免这些问题。
MySQL 复制还在继续完善中。与故障一样,变化总是存在的。MySQL 需要不断应对这些变化,使得复制更高效、更健壮、更有趣。例如,基于行的复制(row-basedreplication)是MySQL 5.1 中的新特性。尽管MySQL 部署形态各异,规模各不相同,我最关心的还是互联网应用的数据服务。MySQL 到分布式存储系统(如HBase和Hadoop)复制的可能性也使我兴奋不已。这样MySQL 就可以更好地共享数据中心。我曾经在Facebook 和Google 的团队支持重要的MySQL 部署,有机会和时间学习这本书中所覆盖的很多东西。本书的作者们同样是MySQL 复制的专家,通过阅读这本书,读者可以分享他们的专业知识。——Mark Callaghan
作者简介
Charles A. Bell博士是Oracle的高级软件工程师。目前是备份首席开发员,并且是MySQL备份和复制小组的成员。
Mats Kindahl博士是Oracle MySQL小组的首席高级软件开发员。他是MySQL基于行的复制及其他几个复制功能的主要架构师和实现者,目前是MySQL高可用性小组的架构师和项目主管,正在开发MySQL Fabric。
Lars Thalmann博士是MySQL复制和备份的开发经理。他创建并发展了MySQL的备份功能,引导了MySQL复制的变革,已经成为MySQL集群复制发展的重要角色。
译者介绍
OCP,阿里第一代MySQL DBA(花名玉泉),擅长自动化运维、监控,MySQL与Hadoop专家,并热衷于机器学习研究
作者简介
Charles A. Bell博士是Oracle的高级软件工程师。目前是备份首席开发员,并且是MySQL备份和复制小组的成员。
Mats Kindahl博士是Oracle MySQL小组的首席高级软件开发员。他是MySQL基于行的复制及其他几个复制功能的主要架构师和实现者,目前是MySQL高可用性小组的架构师和项目主管,正在开发MySQL Fabric。
Lars Thalmann博士是MySQL复制和备份的开发经理。他创建并发展了MySQL的备份功能,引导了MySQL复制的变革,已经成为MySQL集群复制发展的重要角色。
译者介绍
OCP,阿里第一代MySQL DBA(花名玉泉),擅长自动化运维、监控,MySQL与Hadoop专家,并热衷于机器学习研究
目录
前言 xxi
第 1章 引言 2
第 2章 MySQLReplicant库 8
第 3章 MySQL复制原理 18
第 4章 二进制日志 45
第 5章 面向高可用性的复制 112
第 6章 面向横向扩展的 MySQL复制 138
第 7章 数据分片 171
第 8章 深入复制 204
第 9章 MySQL集群 263
第 10章 监控入门 300
第 11章 监控 MySQL 339
第 12章 监控存储引擎 403
第 13章 监控复制 432
第 14章 复制的故障排除 454
第 15章 保护你的资产 481
第 16章 MySQL企业版监控 530
第 17章 使用 MySQL实用工具管理 MySQL复制 553
附录A 复制的提示和技巧617
附录B 一个 GTID的实现 634
索引 645
内容摘要
《高可用MySQL(第2版)》主要讲解真实环境下如何使用MySQL的复制、集群和监控特性,揭示MySQL可靠性和高可用性的方方面面。《高可用MySQL(第2版)》定位于解决MySQL数据库的常见应用瓶颈,在保持MySQL持续可用性的前提下,挖潜各种提高性能的解决方案。《高可用MySQL(第2版)》描述了很多MySQL工具的变化,涵盖了5.5
版本的知识,以及若干5.6版本的功能。《高可用MySQL(第2版)》的作者正是书中介绍的很多工具的设计师,《高可用MySQL(第2版)》揭示了MySQL可靠性和高可用性的许多不为人知的方面。
《高可用MySQL(第2版)》适用于MySQL数据库管理员及MySQL应用开发者。对于相关专业的师生,也有很高的参考价值。
主编推荐
适读人群 :本书适用于MySQL数据库管理员及MySQL应用开发者。对于相关专业的师生,本书也有很高的参考价值。
服务器瓶颈和故障是任何数据库部署中的常见问题,但并不一定会导致全面故障。这本讲实践的书解释了复制、集群和监控功能,无论MySQL系统运行在硬件、虚拟机还是云上,都能帮助你保护MySQL系统不会中断运行。
这本书由这些工具的设计者编写,揭示了关于MySQL可靠性和高可用性的一些不成文的或难以发现的问题,这些知识对于任何使用这个数据库系统的组织来说都非常重要。第2版描述了很多MySQL工具的变化。本书涵盖了5.5版本的知识,以及若干5.6版本的功能。
* 学习复制的基础知识,包括二进制日志和MySQL Replicant库的使用
* 通过冗余处理失效组件
* 横向扩展以管理读负载的增加,使用数据分片处理大型数据库和写负载的增加
* 使用MySQL集群在单个节点上存储并复制数据
* 监控数据库活动和性能,以及重要的操作系统参数
* 跟踪master和slave,处理它们的故障、重启、崩溃及其他事故
* 检查工具,包括MySQL企业监控器、MySQL实用工具、GTID等
以下为对购买帮助不大的评价