描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787121266881
服务器瓶颈和故障是任何数据库部署中的常见问题,但并不一定会导致全面故障。这本讲实践的书解释了复制、集群和监控功能,无论MySQL系统运行在硬件、虚拟机还是云上,都能帮助你保护MySQL系统不会中断运行。
这本书由这些工具的设计者编写,揭示了关于MySQL可靠性和高可用性的一些不成文的或难以发现的问题,这些知识对于任何使用这个数据库系统的组织来说都非常重要。第2版描述了很多MySQL工具的变化。本书涵盖了5.5版本的知识,以及若干5.6版本的功能。
* 学习复制的基础知识,包括二进制日志和MySQL Replicant库的使用
* 通过冗余处理失效组件
* 横向扩展以管理读负载的增加,使用数据分片处理大型数据库和写负载的增加
* 使用MySQL集群在单个节点上存储并复制数据
* 监控数据库活动和性能,以及重要的操作系统参数
* 跟踪master和slave,处理它们的故障、重启、崩溃及其他事故
* 检查工具,包括MySQL企业监控器、MySQL实用工具、GTID等
前言xxi
第1章引言
到底什么是复制
那么,是否需要备份
什么是监控
其他阅读材料
小结
第2章MySQLReplicant库
基本类和函数
对各种操作系统的支持
服务器
服务器角色
小结
第3章MySQL复制原理
复制的基本步骤
配置master
配置slave
连接master和slave
二进制日志简介
二进制日志记录了什么
观察复制的动作
二进制日志的结构和内容
建立新slave
克隆master
克隆slave
克隆操作的脚本
执行常见的复制任务
报表
小结
第4章二进制日志
二进制日志的结构
binlog事件的结构
事件校验
将语句写入日志
写入DML语句
写入DDL语句
写入查询
LOADDATAINFILE语句
二进制日志过滤器
触发器、事件和存储例程
存储过程
存储函数
事件
特殊结构
非事务型变更和错误处理
将事务写入日志
使用XA进行分布式事务处理
二进制日志的组提交
基于行的复制
启用基于行的复制
使用混合模式
二进制日志管理
二进制日志和系统崩溃安全
binlog文件轮换
事故
清除binlog文件
mysqlbinlog实用工具
基本用法
解释事件
二进制日志的选项和变量
基于行的复制参数
小结
第5章面向高可用性的复制
冗余
计划
slave故障
master故障
relay故障
灾难恢复
方法
热备份
双主结构
提升slave
环形复制
小结
第6章面向横向扩展的MySQL复制
横向扩展读操作,而不是写操作
异步复制的价值
管理复制拓扑
应用层的负载均衡
级联复制
配置relay
使用Python添加relay
专用slave
过滤复制事件
使用过滤将事件分配给slave
数据的一致性管理
非级联部署的一致性
级联部署的一致性
小结
第7章数据分片
什么是数据分片
为什么要分片
分片的局限性
分片方案的要素
高层分片架构
数据分区
分配分片
映射分片关键字
分片方案
分片映射函数
处理查询和事务调度
处理事务
分配查询
分片管理
将分片迁移到其他节点
分割分片
小结
第8章深入复制
复制架构基础
中继日志的结构
复制线程
启动和停止slave线程
通过Internet运行复制
使用内置支持建立安全复制
使用Stunnel建立安全复制
细粒度控制复制
关于复制状态的信息
处理断开连接的选项
slave如何处理事件
管理I/O线程
SQL线程的处理
半同步复制
配置半同步复制
监控半同步复制
全局事务标识符
使用GTID配置复制
使用GTID进行故障转移
使用GTID提升slave
2011年,Pinterest开始发展起来。有人说我们比目前其他任何创业公司的发展都要快。刚开始,我们每天都要面临一个新的扩展性瓶颈,它会拖慢整个网站甚至搞垮一切。还记得我们无论去哪里都要带上笔记本电脑,甚至还给它们起了名字。那时我们的脑子里深深刻印着那些停机警告的短信声音。
当基础设施不断地被逼到极限的时候,你就不得不祈求另一种简单的出路。在成长的过程中,我们尝试了至少 5个广为人知的数据库技术,它们都声称能够解决我们所有的问题,可每一次都灾难性地失败了。除了 MySQL。那是 2011年 9月,我们决定从头再来。我们用 MySQL、Memcache和 Redis对一切进行了重新设计,只有三个工程师而已。
MySQL?为什么是 MySQL?对每一种技术,我们都考虑了其关注点,并提问同样的问题。下面是我们对 MySQL的考虑:
y它解决了我们的存储需求吗?没错,我们需要映射、索引、排序和 blob存储,这些 MySQL都有。
y它常用吗?你可以招聘到相关员工吗? MySQL是目前生产线上常使用的数据库之一。很容易招到使用过 MySQL的人,我们可以到帕罗奥多市外走走,大喊我们需要 MySQL工程师,就会冒出来好几个。这可不是开玩笑的。
y它的社区活跃吗?非常活跃。有好多非常棒的书,和一个强大的在线社区。 y面对故障,它健壮吗?即使在恶劣的情况下,我们也从来没有丢失过数据。 y它的扩展性如何?就它本身来说,只是一个很小的组件。我们需要一种上层的分片
方案(这是完全是另一个问题)。
y你会是的用户吗?不,目前不是。的用户包括 Facebook、Twitter和 Google。除非你能够改进一种技术,否则你不会想要成为它的用户。如果你是的用户,你会碰到一些新的扩展性问题,而其他人根本没机会遇到。
y 它的成熟度如何?真正的区别在于成熟度。根据复杂度的不同,成熟度就好比衡量完成一个程序所需的血、汗和泪。 MySQL的确复杂,但可比不上那些神奇的自动集群 NoSQL方案。而且, MySQL拥有 28年好和聪明的贡献,来自于诸如Facebook和 Google那样大规模使用它的公司。根据我们的成熟度定义,在我们审查的所有技术中,MySQL是一个明智的选择。
y 有好的调试工具吗?作为一个成熟的产品,你当然需要强大的调试和分析工具,因为人们很容易遇到一些类似的棘手情况。比如你可能在凌晨三点遇到问题(不止一次)。相比用另一种技术重写一遍熬到凌晨六点,发现问题的根源然后回去睡觉舒服多了。
我们调查了差不多 10种数据库技术后发现选择 MySQL是一个明智的选择。MySQL很棒,但它好比不给你任何行李就把你丢到目的地,让你不得不自食其力。它运行顺利的时候你可以连接,但一旦你开始使用它进行扩展,问题便开始满天飞:
y我的查询执行很慢,怎么办?
y我是不是应该启用压缩?怎么做呢?
y扩展有哪些方法?
y怎样复制?主 -主复制(master-master replication)怎样?
y复制停止了!怎么办?
y持久性(durability,即 fsync速度)有哪些选项?
y我的缓冲区应该多大?
y mysql.ini文件里有那么多字段,它们是什么意思?应该怎么设置?
y我刚刚不小心写到 slave里面去了!怎么防止下次发生同样的事情?
y如何防止不带 where子句的 update命令执行?
y应该用什么调试和分析工具?
y要使用 InnoDB、MyISAM或者其他存储引擎吗?
在线社区有助于回答问题,找到范例,修复漏洞,以及提供解决方法。但通常缺乏强大的凝聚力,而关于架构的深层讨论更是寥寥无几。我们知道如何小规模地使用 MySQL,但这种规模和步调简直是在开玩笑。本书可帮助我们更深刻地了解 MySQL。
MySQL 5.6有一个新特性,即全局事务处理(Global Transaction Handlers),为复制树(replication tree)中的每个事务添加一个标识。这个新特性使故障转移和 slave提升变得容易很多。为此我们等了太久,终于在新版本中很好地涵盖了。
当我们采用分片方案进行重大的重新架构时,关于架构决策问题我们参考了本书,比如复制技术和拓扑、数据分享方案、监测、调整以及云相关的问题等。它让我们更深刻地理解 MySQL的底层运作,使我们更加了解高层查询、访问模式、使用什么结构,以及之后的重复设计。时至今日,MySQL架构仍然为 Pinterest的核心数据服务。
——Yashwanth Nelapati 和 Marty Weiner Pinterest 2014年 2月
第 1 版序
关于复制(replication)的研究很多,但其中的大多数研究成果都没有得到应用。相反, MySQL复制已经被广泛部署,但其原理并不为大多数人所知。本书将改变这种状况。本书中介绍的内容比较适合以下人群:愿意阅读大量的源代码,而且在生产环境中花很多时间进行调试,能够在深夜会议中探讨这些内容的人。
复制允许在出现不可避免的故障的情况下提供高可用的数据服务。故障的原因很多,包括磁盘、服务器或数据中心的损耗。即使所有硬件都是完美无缺且完全冗余的,还有人为因素的影响。例如,数据库表可能被误删,应用程序可能写入了不正确的数据等,总会有偶然故障发生。但通过合理的准备工作,可以保证从故障中恢复,关键是冗余和备份。 MySQL复制支持冗余和备份。
但 MySQL的复制并不仅限于支持故障恢复,它还频繁用于读操作的横向扩展( scale out)。MySQL可以实现大量服务器的高效复制。对于那些读频繁的应用,在商用硬件上支持大量查询是一个低成本的有效策略。
MySQL复制还有其他有用的应用。在线数据定义语言( DDL)是关系型数据库管理系统中非常复杂的一个特性。 MySQL不支持在线 DDL,但通过使用复制,往往可以足够好地部分实现它。如果有创意,还可以使用复制做更多的事情。
复制是使得 MySQL如此广泛流行的特性之一,它允许将流行的 MySQL原型转换为成功的商业关键部署。复制主张简单和便于使用,这一点和 MySQL十分相似。然而,在生产环境中运行往往不够完美。本书解释了成功使用 MySQL复制所必须知道的内容,帮助读者理解复制是怎样实现的,哪些地方可能出错,怎样防止问题的出现,以及怎样在问题出现的时候解决它们——尽管你已经很努力地避免这些问题。
MySQL复制还在继续完善中。与故障一样,变化总是存在的。 MySQL需要不断应对这些变化,使得复制更高效、更健壮、更有趣。例如,基于行的复制( Row-based replication)是 MySQL 5.1中的新特性。
尽管 MySQL部署形态各异,规模各不相同,我关心的还是互联网应用的数据服务。 MySQL到分布式存储系统(如 HBase和 Hadoop)复制的可能性也使我兴奋不已。这样 MySQL就可以更好地共享数据中心。
我曾经在 Facebook和 Google的团队支持重要的 MySQL部署,有机会和时间学习这本书中所覆盖的很多东西。本书的作者们同样是 MySQL复制的专家,通过阅读这本书,读者可以分享他们的专业知识。
——Mark Callaghan
前言
本书的作者们参与创建了 MySQL组件,并在此领域工作了多年。Charles Bell博士是带领 MySQL Utilities小组的高级开发人员,同时还参与复制和备份工作。他的兴趣涵盖 MySQL的各个方面、数据库理论、软件工程、微控制器和 3D打印等。Mats Kindahl博士是主要的高级开发人员,目前带领 MySQL高可用和扩展性小组,是若干 MySQL特性的架构师和实现者。Lars Thalmann博士是 MySQL Replication、Backup、Connectors和 Utilities小组的开发总监和技术领导,他设计了很多复制和备份的特性,主要从事 MySQL集群、复制和备份技术的开发工作。
为了填补 MySQL相关书籍的空白,我们撰写了这本书。关于 MySQL有很多出色的书籍,但很少集中讲述它的高级特性和应用,诸如高可用性、可靠性和可维护性等。本书将涵盖所有这些主题,当然还有其他更多内容。
为了使阅读更加有趣,我们添加了一个遭遇老板提出种种要求的 MySQL从业者的小故事。在该故事中,你将认识 Joel Thomas,近他决定在一家刚开始使用 MySQL的公司工作。你将看到 Joel学习 MySQL的方式,以及如何处理 MySQL从业者所面临的一些棘手的问题。希望你会觉得这部分内容很有趣。
读者对象
本书的读者对象是 MySQL从业人士。我们假设读者已拥有 SQL、MySQL管理和操作系统的基础背景知识。我们会介绍一些关于复制、灾难恢复、系统监控及其他以高可用性为主题的背景信息。其他书籍的第 1章也会介绍相关有用的背景知识。
本书的组织结构
本书分为两部分。第 1部分包括 MySQL的高可用性和横扩展性。由于这些问题很大程度上取决于复制,所以本部分大多都集中在这个主题上。第 2部分介绍构建健壮的数据中心时,监控和性能方面的问题。
第 1部分高可用性和可扩展性
第 1章引言 解释了本书的价值,并提供了阅读的情境。第 2章 MySQL Replicant库 介绍了贯穿本书的一个 Python库。第 3章 MySQL 复制原理 讨论了设置基本复制的手动和自动流程。第 4章二进制日志 解释了与复制、灾难恢复、故障排除和其他管理任务相关的关键文
件。第 5章高可用性复制 给出了服务器故障恢复的多种方法,包括自动化脚本的使用。第 6章横向扩展的 MySQL复制 介绍了提升大数据集读扩展性
译者序
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 日于深圳观澜
评论
还没有评论。