Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

20.7.7.4 退出操作

系统变量 group_replication_exit_state_action 指定了组复制成员在意外离开组时的操作,例如由于错误或问题导致无法自动重新加入或不尝试重新加入。请注意,如果成员被驱逐,成员不知道自己被驱逐,直到它重新连接到组时,才采取指定的操作。

按照影响程度,退出操作如下:

  1. 如果 READ_ONLY 是退出操作,实例将 MySQL 设置为超级只读模式,通过将系统变量 super_read_only 设置为 ON。在超级只读模式下,客户端无法进行任何更新,即使它们具有 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)。但是,客户端仍然可以读取数据,因为不再进行更新,因此随着时间的推移,可能会出现陈旧的读取。使用此设置,您需要积极监控服务器的故障。该退出操作是默认操作;在采取该操作后,成员的状态将在组视图中显示为 ERROR

  2. 如果 OFFLINE_MODE 是退出操作,实例将 MySQL 设置为离线模式,通过将系统变量 offline_mode 设置为 ON。在离线模式下,连接的客户端用户将在下一个请求时断开连接,不再接受连接,除非客户端用户具有 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)。组复制还将系统变量 super_read_only 设置为 ON,因此客户端无法进行任何更新,即使它们具有连接管理员或超级权限。该退出操作防止了更新和陈旧的读取(除非客户端用户具有上述权限),并使代理工具(如 MySQL Router)能够识别服务器不可用,并将客户端连接重定向到其他服务器。它还使实例保持运行状态,以便管理员可以尝试解决问题,而不需要关闭 MySQL。采取该退出操作后,成员的状态将在组视图中显示为 ERROR

  3. 如果 ABORT_SERVER 是退出操作,实例将关闭 MySQL。该操作将防止所有陈旧的读取和客户端更新,但这意味着 MySQL 服务器实例不可用,必须重新启动,即使问题可以在不关闭服务器的情况下解决。采取该退出操作后,成员将从组视图中的服务器列表中删除。

请注意,无论选择哪种退出操作,操作员都需要介入,因为离开组的成员无法重新加入组,除非重新启动组复制。退出操作仅影响客户端是否可以在无法重新加入组的服务器上继续读取数据,以及服务器是否继续运行。

Important

如果在成员成功加入组之前发生故障,则不会执行指定的退出操作。group_replication_exit_state_action 不会被采取。这是在本地配置检查期间发生故障,或者加入成员的配置与组的配置不匹配的情况。在这些情况下,super_read_only 系统变量将保留其原始值,服务器不会关闭 MySQL。为了确保服务器在 Group Replication 未启动时不能接受更新,我们建议在服务器的配置文件中设置 super_read_only=ON,Group Replication 将在成功启动后将其更改为 OFF。这项安全措施特别重要,当服务器配置为在启动时启动 Group Replication (group_replication_start_on_boot=ON),但它也适用于手动启动 Group Replication 使用 START GROUP_REPLICATION 命令。

如果成员成功加入组后发生故障,则将执行指定的退出操作。这是在以下情况下:

  1. 应用程序错误 - 复制应用程序中出现错误。这是一个不可恢复的错误。

  2. 分布式恢复不可行 - 发生了使 Group Replication 的分布式恢复过程(使用远程克隆操作和二进制日志状态传输)无法完成的错误。Group Replication 会自动重试分布式恢复,但如果没有更多选项来完成过程,则会停止。有关详细信息,请参阅 第 20.5.4.4 节,“分布式恢复故障”

  3. 组配置更改错误 - 在使用函数进行组范围配置更改时发生错误,如 第 20.5.1 节,“配置在线组” 所述。

  4. 主选举错误 - 在单一主模式下选举新主成员时发生错误,如 第 20.1.3.1 节,“单一主模式” 所述。

  5. 不可达多数超时 - 成员与组中的大多数成员失去联系,因此处于少数派,并且由 group_replication_unreachable_majority_timeout 系统变量设置的超时已过期。

  6. 成员被逐出组 - 成员被怀疑,并且由 group_replication_member_expel_timeout 系统变量设置的超时已过期,成员恢复与组的通信后发现自己被逐出。

  7. 自动重新加入尝试次数用完 - group_replication_autorejoin_tries 系统变量设置了自动重新加入尝试次数,成员完成了这些尝试但未成功。

以下表格总结了故障情况和每种情况下的操作:

表 20.3 Group Replication 故障情况下的退出操作

故障情况

使用 START GROUP_REPLICATION 启动 Group Replication

使用 group_replication_start_on_boot =ON 启动 Group Replication

成员失败本地配置检查

加入成员和组配置不匹配

super_read_onlyoffline_mode 不变

MySQL 继续运行

在启动时设置 super_read_only=ON 以防止更新

super_read_onlyoffline_mode 不变

MySQL 继续运行

在启动时设置 super_read_only=ON 以防止更新(重要)

成员应用程序错误

分布式恢复不可行

组配置更改错误

主选举错误

无法达到的多数超时

成员从组中驱逐

自动重新加入尝试次数用尽

super_read_only 设置为 ON

offline_modesuper_read_only 设置为 ON

MySQL 关闭

super_read_only 设置为 ON

offline_modesuper_read_only 设置为 ON

MySQL 关闭