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  /  ...  /  Replica Errors During Replication

19.5.1.29 复制期间的副本错误

如果一条语句在源和副本上产生相同的错误(相同的错误代码),则错误将被记录,但复制将继续。

如果一条语句在源和副本上产生不同的错误,则复制SQL线程将终止,副本将在其错误日志中写入一条消息,并等待数据库管理员决定如何处理该错误。这包括源或副本上出现错误,但不是两者都出现的情况。要解决问题,请手动连接到副本,确定问题的原因。SHOW REPLICA STATUS对于此非常有用。然后,修复问题并运行START REPLICA。例如,您可能需要在重新启动副本之前创建一个不存在的表。

Note

如果副本的错误日志中记录了临时错误,您不一定需要采取建议的操作。临时错误应该由客户端重试事务。例如,如果复制SQL线程记录了与死锁相关的临时错误,您不需要手动在副本上重新启动事务,除非复制SQL线程随后以非临时错误消息终止。

如果这种错误代码验证行为不可取,可以使用--replica-skip-errors选项忽略一些或所有错误。

对于非事务存储引擎,如MyISAM,可能有一条语句只部分更新表并返回错误代码。这可能发生在多行插入语句中,其中一行违反了键约束,或者长更新语句被杀死后更新了一些行。如果这在源上发生,副本期望语句的执行结果相同的错误代码。如果不是,复制SQL线程将停止,如前所述。

如果您在使用不同存储引擎的表之间进行复制,请注意同一语句可能在源和副本上产生不同的错误代码,或者在一版本的表上产生错误,而在另一版本的表上不产生错误。例如,因为MyISAM忽略外键约束,INSERTUPDATE语句访问源上的InnoDB表可能会导致外键违规,但同一语句在副本上的MyISAM版本的表上执行时不会产生这种错误,从而导致复制停止。

复制过滤规则首先应用,然后进行权限或行格式检查,使得可以过滤掉任何失败的验证事务;对于被过滤掉的事务,不会执行任何检查,因此也不会引发错误。这意味着副本可以接受只有特定用户被授予访问权限的数据库部分(只要更新使用基于行的复制格式)。这在升级或迁移到使用管理表的系统或应用程序时可能很有帮助,副本用户没有访问这些表的权限。另见第 19.2.5 节,“服务器如何评估复制过滤规则”