
本书对MySQL官方提供的高可用解决方案逐一进行介绍,详细阐述每种方案的原理、架构、优缺点及适用场景,并配合演示说明,帮助读者快速理解相关内容。与其他MySQL高可用相关图书不同,本书专注于MySQL官方团队提供的解决方案,包括MySQL主从复制、MySQL ReplicaSet、组复制、InnoDB Cluster及InnoDB ClusterSet等相关内容。此外,本书还介绍了MySQL 8.0的部分内容,包括文档存储、MySQL Shell及MySQL Router等。附录部分介绍了企业版监控、企业版备份等MySQL官方工具,以及克隆插件和虚拟机环境VirtualBox,使读者可以更加全面地了解MySQL的生态和工具。通过本书,MySQL数据库开发人员、MySQL数据库管理人员和架构师可以了解MySQL当前全部的产品特性和高可用解决方案,获知每种方案的详细内容,并能够将高可用解决方案灵活运用到实际的生产解决方案中。本书面向的读者对象包括MySQL的初学者、数据库架构师、DBA、相关软件开发人员,以及组织内部的IT负责人。
推 荐 序 轶韬是非常优秀的MySQL专业人才,多年来,我们在甲骨文公司的MySQL解决方案团队一起推广MySQL,为客户解决MySQL的相关问题,所有和他共事过的同事和合作过的客户都对他的专业能力赞许有加。 很高兴看到轶韬将自己多年来对MySQL的心得总结成这本书。我想每本书都是作者的心血结晶,但是在交到读者手中之前,总要估量一下读者为什么要花时间读它?它的价值在那里? 熟悉MySQL的朋友都知道,MySQL有很完整的高可用方案,从简单的异步复制、半同步复制,到比较复杂但能提供更为全面保护的组复制、InnoDB Cluster,读者可基于应用场景的需求和具备的技术能力,挑选适合自己团队的最佳方案。然而,如何为应用场景选择最合适的高可用方案呢?有最佳实施准则来指导用户布署和维运所选择的高可用方案吗? 这本书对于MySQL各种高可用方案有详尽的说明,又有清楚的操作演示,读者可以把它当成一部实用的MySQL操作手册,也可以通过它对MySQL各种高可用方案的原理及原则有全面的了解。我相信,当读者读完这本集作者十年来MySQL专业经验的书之后,肯定能找到前面几个问题的答案,也深信这本书能帮助读者成功地使用MySQL。同时我也相信,读者在详细读完这本书后,能为读者的MySQL技术打下坚实的基础,这就是本书的价值。 Oracle公司MySQL全球事业部亚太区解决方案团队高级经理 杜修文 2022年8月28日 前 言 MySQL 是世界上最流行的数据库之一,具有开源、快速、灵活、易用、稳定等特征,广受用户欢迎。MySQL 起源于瑞典,最初只是一个用于报表系统的底层存储引擎。在使用的过程中,随着数据量越来越大,系统复杂度越来越高,最初的存储引擎已经无法满足使用需求。因此,开发人员重新开发了一套类似的存储引擎ISAM(Indexed Sequential Access Method)。2000年,MySQL AB公司成立,开发了支持事务处理的Berkeley DB引擎,2005年发布了具有里程碑意义的MySQL 5.0,明确地表现出迈向高性能数据库的发展步伐。 经过20多年的发展,MySQL已经成为开源领域排名第一的数据库,实现了它的愿景“世界上最受欢迎的数据库”。MySQL 的使用领域非常广泛,包括互联网、初创企业、软件集成商及云厂商。用户依赖MySQL 来节省时间和金钱,为他们的高容量网站、关键业务系统和软件提供动力。 随着用户在应用程序中越来越多地使用 MySQL,关键业务及生产系统对数据库的要求越来越严格,如保证数据安全、数据零丢失、防止泄露敏感信息,以及系统具有高可用性等。本书将重点介绍MySQL实现高可用的多种解决方案,用户可以根据不同的系统环境选择合适的高可用解决方案,以实现系统要求提供的服务级别。 本书将从高可用的概念开始介绍,其中包括可靠性、恢复、冗余等基础概念和MySQL高可用选项。进而介绍MySQL高可用的演进,其中包括主从异步复制、半同步复制、组复制及InnoDB Cluster的简介。书中的各个章节将详细介绍各种解决方案的具体内容,并提供演示,以帮助读者快速理解相关内容。 除此之外,本书还介绍了MySQL 8.0的部分内容,包括文档存储、MySQL Shell、MySQL Router等。 附录部分介绍了企业版监控、企业版备份等MySQL官方工具,以及克隆插件和本书演示所使用的虚拟机环境VirtualBox,使读者可以更加全面地了解MySQL的生态和工具。 本书面向的读者对象包括MySQL的初学者、数据库架构师、DBA、相关软件开发人员,以及组织内部的IT负责人。读者通过本书可以了解MySQL当前全部的高可用解决方案,为系统选型、系统升级做好知识储备。
目 录 第1章 高可用介绍 1 1.1 高可用的概念 1 1.1.1 可靠性 3 1.1.2 恢复 4 1.1.3 冗余 5 1.1.4 容错 5 1.1.5 可伸缩性 6 1.2 MySQL高可用 7 1.2.1 MySQL高可用选项 7 1.2.2 MySQL高可用的实现 8 1.2.3 MySQL高可用带来的挑战 9 第2章 MySQL高可用的演进 10 2.1 主从复制 11 2.1.1 主从复制的优点 11 2.1.2 主从复制的缺点 12 2.1.3 主从复制的方法概述 12 2.1.4 主从复制的类型概述 13 2.1.5 主从复制适用的高可用要求 13 2.2 组复制 14 2.2.1 组复制实现的理论 14 2.2.2 组复制的优点 15 2.2.3 组复制的要求 16 2.2.4 组复制的缺点和限制 17 2.2.5 组复制满足的高可用要求 17 2.3 InnoDB Cluster 18 2.3.1 InnoDB Cluster的构成 19 2.3.2 InnoDB Cluster的要求和限制 19 2.3.3 InnoDB Cluster满足的高可用要求 20 2.4 InnoDB ReplicaSet 20 2.4.1 InnoDB ReplicaSet的构成 21 2.4.2 InnoDB ReplicaSet的使用限制 22 2.4.3 InnoDB ReplicaSet满足的高可用要求 23 2.5 InnoDB ClusterSet 23 2.5.1 InnoDB ClusterSet的要求和限制 24 2.5.2 InnoDB ClusterSet满足的高可用要求 25 2.6 NDB Cluster 25 2.6.1 NDB Cluster的架构 26 2.6.2 NDB Cluster的数据节点和高可用性 27 2.6.3 NDB Cluster适用的场景和要求 28 第3章 主从复制与InnoDB ReplicaSet 30 3.1 主从复制与InnoDB ReplicaSet入门 31 3.1.1 主从复制的原理 31 3.1.2 主从复制的类型 32 3.1.3 主从复制的应用场景 35 3.1.4 InnoDB ReplicaSet的基础知识 37 3.2 主从复制功能的演示 38 3.2.1 配置主从复制的步骤 38 3.2.2 使用GTID进行复制 57 3.2.3 配置半同步复制 63 ? 3.3 InnoDB ReplicaSet演示 67 3.3.1 直接配置InnoDB ReplicaSet 71 3.3.2 采用现有的复制配置InnoDB ReplicaSet 80 3.3.3 InnoDB ReplicaSet与MySQL Router 83 3.3.4 使用InnoDB ReplicaSet 88 第4章 组复制 92 4.1 什么是组复制 92 4.1.1 概念和术语 93 4.1.2 组复制使用的技术 95 4.1.3 组复制的架构及功能 95 4.1.4 组复制的特征及使用场景 98 4.2 组复制的模式 99 4.2.1 单主模式 99 4.2.2 多主模式 101 4.3 组复制的通信系统与成员管理 104 4.3.1 组复制的通信过程 104 4.3.2 组复制达成一致及认证的过程 105 4.3.3 事务的整体顺序传递 107 4.3.4 组成员关系管理 108 4.4 组复制的监控与管理 109 4.4.1 故障检测机制 109 4.4.2 组复制监控 111 4.4.3 改变组复制模式 119 4.5 组复制的事务一致性 124 4.5.1 组复制的一致性相关事件 124 4.5.2 一致性级别的影响 126 4.6 组复制的分布式恢复 130 4.6.1 组复制的分布式恢复过程 130 4.6.2 组复制的分布式恢复方法 131 4.7 组复制的搭建及操作演示 132 4.7.1 组复制的要求 132 4.7.2 本地搭建组复制 134 4.7.3 组复制的操作 143 4.7.4 组复制的安全性 156 4.7.5 组复制的升级 162 4.8 组复制的优化 169 4.8.1 组通信线程(GCT) 169 4.8.2 消息压缩 170 4.8.3 流量控制 171 4.8.4 消息片段化 174 4.8.5 通信引擎缓存管理 175 4.8.6 故障检测和网络分区的响应 177 4.9 组复制的限制 183 4.9.1 组复制的功能性限制 183 4.9.2 组复制的事务大小限制 185 第5章 MySQL Shell 187 5.1 MySQL Shell概述 187 5.1.1 MySQL Shell的特性 188 5.1.2 MySQL 8.0的新特性 190 5.2 MySQL Shell的安装方法 194 5.2.1 安装MySQL Shell 194 5.2.2 在macOS上安装MySQL Shell 196 5.2.3 在Linux上安装MySQL Shell 199 5.3 如何使用MySQL Shell 199 5.3.1 MySQL Shell的命令与选项 200 5.3.2 MySQL Shell入门 204 5.3.3 使用MySQL Shell 210 5.4 在MySQL Shell中使用SQL对数据库进行操作 229 5.4.1 关系型数据库基础 230 5.4.2 使用MySQL的语句和函数 233 5.4.3 使用Python管理数据库 248 5.5 在MySQL Shell中使用NoSQL对文档存储进行操作 261 5.5.1 MySQL中的JSON文档 264 5.5.2 路径表达式 269 5.5.3 JSON函数 273 第6章 MySQL Router 283 6.1 MySQL Router概述 284 6.2 MySQL Router的安装 285 6.2.1 Windows下的MySQL Installer 286 6.2.2 在其他操作系统下安装MySQL Router 289 6.3 部署与配置 289 6.3.1 基本连接路由 290 6.3.2 路由器演示 291 6.3.3 配置路由器 294 6.4 路由器应用程序 301 6.4.1 启动路由器 302 6.4.2 使用路由器日志 302 第7章 InnoDB Cluster 304 7.1 InnoDB Cluster概述 304 7.2 ACID特性 305 7.3 组件 308 7.3.1 组复制 308 7.3.2 MySQL Shell 309 7.3.3 X DevAPI 310 7.3.4 AdminAPI 310 7.3.5 MySQL Router 311 7.4 安装InnoDB Cluster 311 7.4.1 在Windows上安装MySQL 313 7.4.2 利用Sandbox部署InnoDB Cluster 319 第8章 使用AdminAPI部署InnoDB Cluster 325 8.1 dba类 326 8.2 cluster类 329 8.3 InnoDB Cluster部署演示 330 8.3.1 部署全新的InnoDB Cluster 331 8.3.2 将组复制转换为InnoDB Cluster 338 8.4 InnoDB Cluster与MySQL Router 343 8.4.1 配置MySQL Router 343 8.4.2 AdminAPI与MySQL Router 346 第9章 InnoDB Cluster管理与优化 348 9.1 集群的监视 348 9.1.1 使用Cluster.describe()方法监视集群 349 9.1.2 使用Cluster.status()方法检查集群的状态 350 9.1.3 监视恢复操作 357 9.1.4 查看InnoDB Cluster和组复制的通信协议 359 9.2 集群的使用 360 9.2.1 检查实例配置 361 9.2.2 添加和删除实例 362 9.2.3 解散集群 363 9.2.4 改变集群拓扑 364 9.3 集群配置 366 9.3.1 集群的配置选项 366 9.3.2 配置选举过程 367 9.3.3 配置故障转移一致性 367 9.3.4 配置实例自动重新加入 368 9.3.5 配置并行复制应用 369 9.3.6 集群的安全性 371 9.4 集群的升级 372 9.4.1 MySQL Router滚动升级 373 9.4.2 更新InnoDB Cluster的元数据 373 9.5 集群的故障排除 374 9.5.1 将实例重新加入集群 374 9.5.2 从丢失仲裁中恢复集群 375 9.5.3 在成员宕机后重新启动集群 376 9.5.4 重新扫描集群 377 9.6 使用集群的限制与技巧 378 9.6.1 使用集群的限制 378 9.6.2 使用集群的技巧 379 第10章 InnoDB ClusterSet 382 10.1 InnoDB ClusterSet概述 382 10.2 部署InnoDB ClusterSet 384 10.3 InnoDB ClusterSet的状态与拓扑 394 10.3.1 InnoDB ClusterSet的状态 394 10.3.2 InnoDB ClusterSet的拓扑 399 10.4 InnoDB ClusterSet与MySQL Router 401 10.4.1 ClusterSet使用路由器时的注意事项 401 10.4.2 ClusterSet使用路由器的配置步骤 401 10.5 InnoDB ClusterSet的主动切换与故障转移 408 10.5.1 InnoDB ClusterSet执行主动切换的过程 408 10.5.2 InnoDB ClusterSet的故障转移 415 10.6 InnoDB ClusterSet的要求与限制 423 10.6.1 InnoDB ClusterSet的要求 423 10.6.2 InnoDB ClusterSet的限制 424 第11章 MySQL的相关软件与工具 425 11.1 MySQL产品的生命周期 425 11.2 MySQL的高级功能 427 11.2.1 企业版备份 427 11.2.2 企业版监控 432 11.2.3 MySQL TDE (Transparent Data Encryption) 437 11.3 MySQL Workbench 446 11.3.1 MySQL Workbench的下载 446 11.3.2 MySQL Workbench的功能及使用 447 11.4 MySQL的克隆插件 451 11.4.1 安装克隆插件 452 11.4.2 克隆数据 453 11.4.3 复制使用克隆插件 454 11.5 关于VirtualBox 457 后记 462