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

MySQL 8.3 Reference Manual  /  ...  /  Recovering From Failed Replication Privilege Checks

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

如果对 PRIVILEGE_CHECKS_USER 帐户的权限检查失败,事务将不会执行,复制将停止在该通道上。错误的详细信息和最后应用的事务将记录在性能模式 replication_applier_status_by_worker 表中。按照以下步骤从错误中恢复:

  1. 标识导致错误的复制事件,并验证该事件是否来自可靠的来源。您可以使用 mysqlbinlog 检索和显示错误时记录的事件。有关如何执行此操作的说明,请参见 第 9.5 节,“点时间(增量)恢复”

  2. 如果复制事件不是预期的或不是来自已知和可靠的来源,请调查原因。如果您可以确定事件的原因,并且没有安全考虑因素,请按照以下步骤修复错误。

  3. 如果 PRIVILEGE_CHECKS_USER 帐户应该被允许执行事务,但却被错误配置了,授予帐户缺少的权限,使用 FLUSH PRIVILEGES 语句或执行 mysqladmin flush-privilegesmysqladmin reload 命令以重新加载授权表,然后重新启动复制通道。

  4. 如果事务需要执行,并且您已经验证了它来自可靠的来源,但 PRIVILEGE_CHECKS_USER 帐户通常不应该拥有该权限,可以临时授予该帐户所需的权限。应用复制事件后,删除帐户的权限,并采取必要的步骤以确保事件不再发生。

  5. 如果事务是仅在源服务器上执行的管理操作,而不是在副本服务器上执行的,或者仅在单个复制组成员上执行的,跳过事务在服务器或服务器组上停止复制,然后发出 START REPLICA 以重新启动复制通道。为了避免将来出现这种情况,可以在执行管理语句之前发出 SET sql_log_bin = 0,然后在执行完毕后发出 SET sql_log_bin = 1,以便它们不会在源服务器上记录。

  6. 如果事务是 DDL 或 DML 语句,既不应该在源服务器上执行,也不应该在副本服务器上执行,跳过事务在服务器或服务器组上停止复制,手动撤销事务在原始服务器上,然后发出 START REPLICA 以重新启动复制。

要跳过事务,如果使用 GTID,可以提交一个空事务,该事务具有失败事务的 GTID,例如:

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

如果不使用 GTID,可以发出 SET GLOBAL sql_replica_skip_counter 语句以跳过事件。有关使用该替代方法和跳过事务的更多详细信息,请参见 第 19.1.7.3 节,“跳过事务”