文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  从失败的复制权限检查中恢复

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 帐户通常不应该拥有此权限,您可以暂时向 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 节,“跳过事务”