产品特色
编辑推荐
适读人群 :本书适用于MySQL数据库管理员及MySQL应用开发者。对于相关专业的师生,本书也有很高的参考价值。 服务器瓶颈和故障是任何数据库部署中的常见问题,但并不一定会导致全面故障。这本讲实践的书解释了复制、集群和监控功能,无论MySQL系统运行在硬件、虚拟机还是云上,都能帮助你保护MySQL系统不会中断运行。
这本书由这些工具的设计者编写,揭示了关于MySQL可靠性和高可用性的一些不成文的或难以发现的问题,这些知识对于任何使用这个数据库系统的组织来说都非常重要。第2版描述了很多MySQL工具的变化。本书涵盖了5.5版本的知识,以及若干5.6版本的功能。
* 学习复制的基础知识,包括二进制日志和MySQL Replicant库的使用
* 通过冗余处理失效组件
* 横向扩展以管理读负载的增加,使用数据分片处理大型数据库和写负载的增加
* 使用MySQL集群在单个节点上存储并复制数据
* 监控数据库活动和性能,以及重要的操作系统参数
* 跟踪master和slave,处理它们的故障、重启、崩溃及其他事故
* 检查工具,包括MySQL企业监控器、MySQL实用工具、GTID等
内容简介
《高可用MySQL(第2版)》主要讲解真实环境下如何使用MySQL的复制、集群和监控特性,揭示MySQL可靠性和高可用性的方方面面。《高可用MySQL(第2版)》定位于解决MySQL数据库的常见应用瓶颈,在保持MySQL持续可用性的前提下,挖潜各种提高性能的解决方案。《高可用MySQL(第2版)》描述了很多MySQL工具的变化,涵盖了5.5
版本的知识,以及若干5.6版本的功能。《高可用MySQL(第2版)》的作者正是书中介绍的很多工具的设计师,《高可用MySQL(第2版)》揭示了MySQL可靠性和高可用性的许多不为人知的方面。
《高可用MySQL(第2版)》适用于MySQL数据库管理员及MySQL应用开发者。对于相关专业的师生,也有很高的参考价值。
目录
前言 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
精彩书摘
创建新服务器 无论用于横向扩展的slave,还是备用的新master,创建新服务器都需要对已有服务器做备份,并在新服务器上恢复这个备份映像。这需要有一个快速高效的备份方法来最小化宕机时间,并保持系统负载维持在一个可接受的水平。 法律原因 除了纯粹业务原因需要保护数据外,法律规定也可能要求保证数据安全,即使在灾难发生时。不遵守这些规定会给业务运作带来重大问题。 简而言之,不管有没有其他的预防措施来保证数据的安全,备份策略对于业务运作都是必需的。 什么是监控 即便已经正确搭建了复制,还有必要理解你的系统负载,并密切监控可能发生的任何问题。客户使用模式的改变将导致业务需求变化,需要平衡系统以尽可能高效地使用资源,降低由于资源利用的突然变更导致系统不可用性的风险。 为了应对这些变更,有很多监控、度量和计划的方法,比如: 为频繁读取的表添加索引。 重写查询或者改变数据库的结构,以缩短执行时间。 如果锁被长时间占用,表示多个连接正在使用同一个表,可能要切换存储引擎。 在横向扩展的数据库复制架构下,如果某些slave处理了大量的查询,处于过热状态,系统可能需要重新均衡,以保证所有slave都被平均地访问。 在处理资源使用的突然变更时,首先确定每个服务器的正常负载,然后了解在负载突然增加时,系统响应什么时候开始变慢。 ……
前言/序言
译者序
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专家,并热衷于机器学习研究
《现代数据架构:构建弹性、高性能的云原生数据库系统》 在当今数字经济的浪潮中,数据已成为企业最宝贵的资产。随着业务的飞速发展和用户需求的不断增长,如何构建一个既能保证数据安全、稳定,又能提供极致性能和灵活扩展性的现代化数据架构,成为了每一个技术决策者必须面对的核心挑战。 《现代数据架构:构建弹性、高性能的云原生数据库系统》并非一本仅聚焦于单一技术点的“工具书”,而是一部系统性地探讨如何设计、实现和运维支撑现代业务所需的数据库系统的实践指南。本书将带领读者跳出传统数据库管理的思维定式,深入理解在云原生时代,数据系统所面临的全新机遇与挑战,并提供一套全面、可落地的解决方案。 本书核心理念: 本书的核心理念在于“弹性、高性能、安全性与云原生”。我们认为,一个优秀的现代数据系统,必须具备以下关键特征: 极高的可用性与弹性: 能够应对突发流量、硬件故障、甚至区域性灾难,保证业务的连续性,实现毫秒级的故障切换。 卓越的性能表现: 能够处理海量数据,提供低延迟的读写响应,满足实时分析和高并发交易的需求。 坚不可摧的安全性: 能够抵御各种网络攻击,保护敏感数据不被泄露或篡改,满足合规性要求。 云原生的设计思维: 充分利用云计算的优势,实现自动化部署、弹性伸缩、成本优化和DevOps的集成。 本书内容概览: 本书的结构设计旨在循序渐进,从宏观的架构理念到微观的技术实现,层层深入,帮助读者构建起完整的知识体系。 第一部分:现代数据架构的基石 1. 云原生时代的数据挑战: 深入分析传统数据系统在云原生环境下的局限性,如单点故障、伸缩困难、运维成本高昂等。探讨微服务、容器化、DevOps等新兴技术对数据架构提出的新要求。 2. 数据架构的演进之路: 回顾从单机数据库到分布式数据库,再到云原生数据库的演进历程。介绍各种数据存储和处理范式的优劣,为读者理解不同技术选择背后的逻辑奠定基础。 3. 高可用性设计原则: 详细阐述高可用性(HA)的核心设计原则,包括冗余、容错、故障检测、自动切换、数据同步等。理解CAP理论在分布式系统中的实际应用与权衡。 4. 性能优化关键要素: 剖析影响数据库性能的各项因素,如查询优化、索引策略、缓存机制、硬件选型、网络配置等,并介绍针对不同业务场景的性能调优方法。 5. 数据安全与合规性: 探讨数据生命周期中的安全风险,包括传输安全、存储安全、访问控制、备份恢复、数据脱敏等。介绍满足GDPR、CCPA等数据隐私法规的技术手段。 第二部分:构建弹性、高性能的数据基础设施 1. 分布式数据库选型与实践: 关系型分布式数据库: 深入解析主流的云原生关系型数据库(如PolarDB, Aurora, CockroachDB等)的架构原理、一致性模型、分片策略、读写分离实现,以及在实际应用中的部署、运维和故障排查技巧。 NoSQL数据库的智慧: 探索不同类型的NoSQL数据库(键值存储、文档数据库、列族数据库、图数据库)的适用场景,以及如何构建具备高可用和高性能的NoSQL集群。重点分析如何利用分布式NoSQL数据库应对海量数据和高并发访问。 NewSQL的融合之道: 介绍NewSQL数据库如何融合关系型数据库的ACID事务特性与NoSQL数据库的可扩展性,并提供实际部署与优化建议。 2. 数据复制与同步策略: 同步复制与异步复制: 深入对比不同复制模式的优缺点,以及在不同场景下的选择。 多活架构实现: 讲解如何通过多活架构提升系统的可用性,并实现就近访问和容灾能力,详细介绍跨地域、跨区域的数据同步技术。 异构数据源同步: 探讨如何实现不同数据库之间以及与数据湖、数据仓库之间的数据实时同步,为数据集成提供解决方案。 3. 缓存层构建与优化: 分布式缓存技术: 介绍Redis, Memcached等主流分布式缓存的技术原理,以及如何构建高可用、高性能的缓存集群。 缓存策略与一致性: 探讨缓存穿透、缓存击穿、缓存雪崩等问题,并给出相应的解决方案。讲解读写缓存的策略,以及如何保证缓存与数据库之间的数据一致性。 4. 负载均衡与连接池: 数据库负载均衡: 讲解不同负载均衡算法在数据库层面的应用,以及如何选择合适的负载均衡器,实现流量的有效分配。 连接池优化: 深入分析数据库连接池的工作原理,以及如何通过合理的配置,减少连接建立的开销,提升系统吞吐量。 第三部分:云原生数据系统的运维与演进 1. 容器化与Kubernetes下的数据管理: StatefulSet与PersistentVolume: 讲解如何在Kubernetes中部署和管理有状态应用,特别是数据库。 Operator模式: 介绍Operator如何自动化数据库的部署、伸缩、备份、恢复和升级等复杂操作,实现真正的“云原生数据库”。 Operator的开发与应用: 提供实际的Operator开发指南,以及如何利用现有的Operator管理各类数据库。 2. 自动化运维与监控告警: 基础设施即代码(IaC): 强调通过Terraform, Ansible等工具实现数据库基础设施的自动化部署与管理。 全链路监控体系: 搭建从应用层到数据库层,再到基础设施层的全方位监控体系。重点介绍Prometheus, Grafana等监控工具的使用。 智能告警与故障响应: 设计有效的告警规则,并建立自动化的故障响应机制,实现快速定位与解决问题。 3. 性能监控与容量规划: 关键性能指标(KPIs): 识别并跟踪数据库的关键性能指标,如QPS, TPS, 响应时间, 慢查询率, 资源利用率等。 容量规划与弹性伸缩: 基于历史数据和业务预测,进行科学的容量规划,并配置自动化的弹性伸缩策略,应对业务波动。 4. 数据备份、恢复与灾难恢复: 多策略备份方案: 讲解全量备份、增量备份、差异备份等策略,以及如何制定适合业务需求的备份计划。 高效恢复技术: 探讨Point-in-Time Recovery (PITR) 等高效恢复技术,确保数据损失最小化。 灾难恢复(DR)演练: 设计和执行有效的灾难恢复演练,确保在紧急情况下能够快速恢复业务。 5. 数据库迁移与升级: 云端数据库迁移: 提供从本地数据中心迁移到云数据库的详细步骤和注意事项,包括数据验证、停机时间最小化等。 在线平滑升级: 讲解如何实现数据库系统的在线平滑升级,最大程度地减少对业务的影响。 本书的目标读者: 本书适合所有参与构建和维护现代数据系统的技术人员,包括但不限于: 数据库管理员(DBA): 想要深入了解分布式和云原生数据库技术,提升管理能力和故障排查效率的DBA。 后端开发工程师: 期望在应用程序设计中更好地利用数据库特性,优化数据访问性能,并理解数据系统高可用性原理的开发者。 架构师: 负责设计和规划企业数据架构,需要理解不同技术选型的优劣,以及如何构建弹性、可扩展、高性能数据系统的架构师。 运维工程师: 致力于自动化部署、监控和维护云原生数据基础设施的运维专家。 技术经理与CTO: 需要对当前数据技术发展趋势有深刻理解,并做出明智技术决策的管理层。 结语: 《现代数据架构:构建弹性、高性能的云原生数据库系统》不仅仅是一本书,更是您在数字化转型道路上的得力助手。通过阅读本书,您将掌握构建下一代数据系统的核心技能,为您的业务增长和技术创新提供坚实的数据支撑,迎接更加智能、敏捷、强大的未来。