#### 18.7.7.4退出行动

这个[`组\复制\退出\状态\操作`](group-replication-options.html#sysvar_group_replication_exit_state_action)系统变量可从MySQL 8.0.12和MySQL 5.7.24中获得，它指定当成员由于错误或问题而意外离开组，并且无法自动重新加入或不尝试时，组复制会执行什么操作。请注意，对于被驱逐的成员，该成员在重新连接到组之前不知道自己被驱逐，因此只有在该成员设法重新连接，或者该成员对自己产生怀疑并驱逐自己时，才会采取指定的操作。

按影响顺序，退出行动如下：

1.  如果`只读`是退出操作，实例通过设置系统变量将MySQL切换到超级只读模式[`超级只读`](server-system-variables.html#sysvar_super_read_only)到`在…上`。当成员处于超级只读模式时，客户端无法进行任何更新，即使他们拥有[`连接管理`](privileges-provided.html#priv_connection-admin)特权（或不推荐的[`超级的`](privileges-provided.html#priv_super)特权）。但是，客户机仍然可以读取数据，而且由于不再进行更新，因此过时读取的可能性会随着时间的推移而增加。因此，使用此设置，您需要主动监控服务器的故障。这个退出操作是MySQL 8.0.15的默认操作。执行此退出操作后，成员的状态显示为`错误`在这个团体看来。

2.  如果`离线模式`是退出动作，实例通过设置系统变量将MySQL切换到离线模式[`离线模式`](server-system-variables.html#sysvar_offline_mode)到`在…上`。当成员处于脱机模式时，已连接的客户端用户在下一次请求时会断开连接，并且不再接受连接，但具有[`连接管理`](privileges-provided.html#priv_connection-admin)特权（或不推荐的[`超级的`](privileges-provided.html#priv_super)特权）。组复制还设置系统变量[`超级只读`](server-system-variables.html#sysvar_super_read_only)到`在…上`，因此客户端无法进行任何更新，即使它们已连接到[`连接管理`](privileges-provided.html#priv_connection-admin)或[`超级的`](privileges-provided.html#priv_super)特权此退出操作可防止更新和过时读取（具有所述权限的客户端用户的读取除外），并使MySQL Router等代理工具能够识别服务器不可用并重定向客户端连接。它还让实例保持运行，这样管理员就可以尝试在不关闭MySQL的情况下解决问题。此退出操作可从MySQL 8.0.18获得。执行此退出操作后，成员的状态显示为`错误`在团体看来（不是`离线`，这意味着成员具有可用的组复制功能，但当前不属于某个组）。

3.  如果`中止服务器`是退出动作，实例关闭MySQL。指示成员关闭自己可以防止所有过时的读取和客户端更新，但这意味着MySQL服务器实例不可用，必须重新启动，即使没有该步骤问题也可以得到解决。当系统变量被添加到MySQL 8.0.15（含）时，这个退出操作是MySQL 8.0.12的默认操作。执行此退出操作后，该成员将从组视图中的服务器列表中删除。

    请记住，无论设置了什么退出操作，都需要操作员干预，因为已用尽自动重新加入尝试（或从未尝试过任何自动重新加入尝试）并已被从组中驱逐的前成员，在未重新启动组复制的情况下，不允许重新加入。退出操作仅影响客户端是否仍能读取无法重新加入组的服务器上的数据，以及服务器是否保持运行。

重要的

如果在成员成功加入组之前发生故障，则[`组\复制\退出\状态\操作`](group-replication-options.html#sysvar_group_replication_exit_state_action) *没有被带走*。如果在本地配置检查期间出现故障，或加入成员的配置与组的配置不匹配，则会出现这种情况。在这些情况下[`超级只读`](server-system-variables.html#sysvar_super_read_only)系统变量保留其原始值，服务器不会关闭MySQL。为了确保在组复制未启动时服务器无法接受更新，我们建议[`超级只读=打开`](server-system-variables.html#sysvar_super_read_only)在启动时在服务器的配置文件中设置，组复制将更改为`关`在主成员上成功启动后。当服务器配置为在服务器启动时启动组复制时，此保护措施尤为重要([`组_复制_启动_启动=on`](group-replication-options.html#sysvar_group_replication_start_on_boot))，但当使用[`启动组复制`](start-group-replication.html)命令

如果成员成功加入组后发生故障，则会采取指定的退出操作。以下情况就是这种情况：

1.  *应用程序错误*-复制应用程序中有错误。此问题无法恢复。

2.  *分布式恢复不可能*-有一个问题意味着组复制的分布式恢复过程（使用远程克隆操作和二进制日志的状态传输）无法完成。组复制会在合理的情况下自动重试分布式恢复，但如果没有更多选项来完成该过程，则会停止。有关详细信息，请参阅[第18.5.4.4节，“分布式恢复的容错”](group-replication-distributed-recovery-fault.html).

3.  *组配置更改错误*-如中所述，在使用功能执行集团范围内的配置更改期间发生错误[第18.5.1节，“配置在线组”](group-replication-configuring-online-group.html).

4.  *初选错误*-在单一主要模式下为组选择新主要成员时出错，如中所述[第18.1.3.1节，“单一主模式”](group-replication-single-primary-mode.html).

5.  *不可达多数超时*-该成员已与大多数组成员失去联系，因此是少数成员，超时由[`组\复制\无法访问\多数\超时`](group-replication-options.html#sysvar_group_replication_unreachable_majority_timeout)系统变量已过期。

6.  *被开除出团体的成员*-已对该成员提出怀疑，以及[`组\复制\成员\驱逐\超时`](group-replication-options.html#sysvar_group_replication_member_expel_timeout)系统变量已过期，成员已恢复与该组的通信，并发现该组已被驱逐。

7.  *退出自动重新加入尝试*-那个[`组\u复制\u自动连接\u尝试`](group-replication-options.html#sysvar_group_replication_autorejoin_tries)系统变量被设置为指定在失去多数票或被驱逐后自动重新加入尝试的次数，并且成员完成了此次数的尝试但未成功。

    下表总结了每种情况下的故障场景和操作：

[](<>)

**表 18.3 组复制失败情况下的退出操作**

| 故障情况 | 组复制开始于`开始 GROUP_REPLICATION` | 组复制开始于`group_replication_start_on_boot =开` |
| ---- | ---------------------------- | ------------------------------------------ |
| 成员未通过本地配置检查<br/><br/>加入成员和组配置不匹配 | `super_read_only`和`离线模式`不变<br/><br/>MySQL 继续运行<br/><br/>放`super_read_only=ON`在启动时防止更新 | `super_read_only`和`离线模式`不变<br/><br/>MySQL 继续运行<br/><br/>放`super_read_only=ON`在启动时防止更新（重要） |
| 成员上的应用程序错误<br/><br/>无法进行分布式恢复<br/><br/>组配置更改错误<br/><br/>初选错误<br/><br/>无法到达多数超时<br/><br/>成员被群开除<br/><br/>没有自动重新加入尝试 | `super_read_only`调成`在`<br/><br/>要么<br/><br/>`离线模式`和`super_read_only`调成`在`<br/><br/>要么<br/><br/>MySQL 关闭 | `super_read_only`调成`在`<br/><br/>要么<br/><br/>`离线模式`和`super_read_only`调成`在`<br/><br/>要么<br/><br/>MySQL 关闭 |
