#### 17.3.3.3 从失败的复制权限检查中恢复

如果针对`PRIVILEGE_CHECKS_USER`帐户失败，事务未执行并且通道的复制停止。错误的详细信息和最后应用的事务记录在 Performance Schema 中[`replication_applier_status_by_worker`](performance-schema-replication-applier-status-by-worker-table.html)桌子。请按照以下过程从错误中恢复：

1.  识别导致错误的复制事件并验证该事件是否是预期的以及是否来自受信任的来源。您可以使用[**mysqlbinlog**](mysqlbinlog.html)检索并显示在错误发生时记录的事件。有关执行此操作的说明，请参阅[第 7.5 节，“时间点（增量）恢复”](point-in-time-recovery.html).

2.  如果复制的事件不是预期的或不是来自已知和可信的来源，请调查原因。如果您可以确定事件发生的原因并且没有安全考虑，请按照如下所述继续修复错误。

3.  如果`PRIVILEGE_CHECKS_USER`账户本应被允许执行交易，但配置错误，授予账户缺少的权限，使用[`刷新特权`](flush.html#flush-privileges)语句或执行[**mysqladmin 刷新权限**](mysqladmin.html)要么[**mysqladmin 重新加载**](mysqladmin.html)命令重新加载授权表，然后重新启动通道的复制。

4.  如果交易需要执行并且您已经验证它是可信的，但是`权限检查用户`帐户通常不应具有此权限，您可以将所需的权限授予`权限检查用户`暂记帐。应用复制的事件后，从帐户中删除该权限，并采取任何必要的步骤确保该事件不会再次发生（如果可以避免）。

5.  如果事务是一项管理操作，该操作只应在源上发生，而不应在副本上发生，或者只应在单个复制组成员上发生，请跳过它停止复制的一个或多个服务器上的事务，然后发出[`开始复制`](start-replica.html)重新启动通道上的复制。为了避免将来出现这种情况，您可以向`设置sql_log_bin=0`在他们面前`设置sql_log_bin=1`在它们之后，这样它们就不会登录到源代码。

6.  如果事务是DDL或DML语句，不应该发生在源或副本上，请跳过停止复制的服务器上的事务，在最初发生事务的服务器上手动撤消事务，然后发出[`开始复制`](start-replica.html)重新启动复制。

    要跳过一个事务，如果正在使用GTID，请提交一个具有失败事务的GTID的空事务，例如：


```
SET GTID_NEXT='aaa-bbb-ccc-ddd:N';
BEGIN;
COMMIT;
SET GTID_NEXT='AUTOMATIC';
```

如果未使用GTID，则发出警告`设置全局sql\u副本\u跳过\u计数器`或`设置全局sql_slave_skip_计数器`语句跳过该事件。有关使用此替代方法的说明以及有关跳过事务的更多详细信息，请参阅[第17.1.7.3节“跳过交易”](replication-administration-skip.html).
