1. 请详细描述在复制拓扑中参与复制的线程类型以及各自所承担的功能。
答:当从属服务器连接到主服务器时,在主服务器上会创建 Binlog 转储线程,在从属服务器上会默 认创建 I/O 线程和 SQL 线程。
- Binlog 转储线程用于从二进制日志读取事件并将其发送到从属服务器的 I/O 线程。
- I/O 线程从主服务器的 Binlog 转储线程读取事件并将其写入从属服务器的中继日志。
- SQL(或应用)线程在单线程从属服务器上应用中继日志事件,在多线程从属服务器上分配协调 工作者线程应用中继日志事件。
2. 在从属服务器上执行 RESET SLAVE 命令时,会发生哪些操作?
答:RESET SLAVE 命令会断开从属服务器与主服务器的连接,以重置从属服务器,具体效果如下:
- 清除 master.info 和 relay.log 资料档案库
- 删除所有中继日志
- 启动新的中继日志文件
- 将 CHANGE MASTER TO 语句中指定的任何 MASTER_DELAY 重置为零
- 会保留连接参数,以便可以在不执行 CHANGE MASTER TO 的情况下重启从属服务器。 但发出 RESET SLAVE ALL 时会重置连接参数。
3. 在排除 MySQL 复制故障时,一般会从哪些维度或方向切入?
答:在解决 MySQL 复制故障时,通常考虑的因素如下:
- 查看错误日志,错误日志可以提供足够信息来确定和更正复制中的问题
- 在主服务器上发出 SHOW MASTER STATUS 语句,检查 master 状态
- 在从属服务器上发出 SHOW SLAVE STATUS 命令,
~ 如果从属服务器运行正常,Slave_IO_Running 和 Slave_SQL_Running 显示 Yes
~ Last_IO_Error 和 Last_SQL_Error 显示 IO 和 SQL 线程的最新错误消息
- 在主服务器和从属服务器上发出 SHOW PROCESSLIST 命令,检查 Binlog 转储线程、I/O 线程和 SQL 线程的状态
- 对于突然停止工作的从属服务器,检查最近复制的语句
~ 如果操作因约束问题或其他错误而失败,则 SQL 线程会停止
~ 错误日志会记录包含导致 SQL 线程停止的事件
~ 再验证从属服务器数据没有被直接修改(复制之外的)
4. 结合 14-5“体系结构”,请说明你对 InnoDB 集群的整体认知。
答:MySQL 组复制技术是 InnoDB 集群实现的基础,组复制安装在集群中的每个服务器实例上。组 复制能够创建弹性复制拓扑,在群集中的服务器脱机时可以自动重新配置自己。必须至少有三台 服务器才能组成一个可以提供高可用性的组。组可以在单主模式下运行,一次只有一台服务器接 受更新;也可以在多主模式下运行,所有服务器都可以接受更新,即使更新是同时发布的。
MySQL Router 位于应用程序和集群之间,用来实现负载均衡。
MySQL Shell 用来管理集群,通过 MySQL Shell 的管理 API,可以使用熟悉的 JavaScript、 Python 或 SQL 命令来管理 MySQL 集群。
5. 请对组复制的原理和功能做一个完整的描述,并说明组复制有哪些先决条件和限制。
答:组复制是 MySQL 的一个插件,它能够在一组服务器之间进行高可用的复制数据,并自动处理服 务器故障转移,当成员因崩溃、故障或重新连接而加入或离开组时自动重新配置组,并解决冲突。 集群中的服务器属于一个复制组(replication group),一个复制组最多9台最少3台服务 器,必须使用全局事务标识符(GTID),组成员身份是自动管理的,服务器可以随时离开和加入 该组,一台服务器的更改将复制到组的所有成员。 使用组复制技术必须要满足以下条件和限制:
- 通讯低延迟,要求集群服务器位于本地网络
- 基于复制冲突检测的需要,组复制仅适用于 InnoDB 存储引擎,GTID 要启用,表有主键
- 对于复制配置,要启用二进制日志记录和从属服务器更新,二进制日志用行格式记录,元数据 必须以 table 格式存储
6. InnoDB 集群单主模式和多主模式集群结构适用哪些应用场合?
答:InnoDB 集群主要的应用场合如下:
- 弹性复制环境,这种复制基础架构中涉及的服务器数量非常地不稳定。
- 高可用分片环境,分片是一种流行的写横向扩展方法,每个分片可以映射到一个复制组。
- 作为标准主从复制的替代方案使用,更可靠更安全。
7. MySQL Shell(mysqlsh)和 MySQL Router(mysqlrouter)各自提供了什么样的集群功能?
答:MySQL Shell 提供功能如下:
- MySQL 的高级客户机和代码编辑器
- 通过使用 JavaScript、Python 或 SQL 命令提供脚本功能
- 允许通过 API 访问 MySQL 功能
- 支持制表符分隔、表格和 JSON 格式的输出
- 通过全局会话对象与 MySQL 服务器交互
MySQL Router 提供功能如下:
- 充当中间件,在客户端应用程序和后端 MySQL 服务器之间提供透明路由
- 通过自动路由连接来管理故障转移
- 提供负载均衡,跨服务器池分布数据库连接以提高性能和可扩展性
- 实现可插入架构,开发人员可以扩展产品并为自定义用例创建插件
8. 面对集群的重大停机事故,请给出你所能采取的恢复集群的办法和步骤。
答:第一步,重启集群实例
第二步,连接到一个实例并运行 MySQL Shell
第三步,连接到集群并执行 dba.rebootClusterFromCompleteOutage()