16.4.1.27 复制期间的副本错误

如果语句在源和副本上均产生相同的错误(相同的错误代码),则会记录该错误,但复制将 continue。

如果语句在源和副本上产生不同的错误,则复制 SQL 线程终止,副本将消息写入其错误日志,并 await 数据库 Management 员决定如何处理错误。这包括语句在源或副本(而不是两者)上生成错误的情况。要解决此问题,请手动连接到副本并确定问题的原因。 显示从站状态对此很有用。然后解决问题并运行START SLAVE。例如,您可能需要先创建一个不存在的 table,然后才能再次启动副本。

Note

如果在副本的错误日志中记录了临时错误,则不必采取引用的错误消息中建议的任何操作。临时错误应由 Client 端重试事务处理。例如,如果复制 SQL 线程记录了与死锁相关的临时错误,则无需在副本上手动重新启动事务,除非复制 SQL 线程随后以非临时错误消息终止。

如果不希望使用此错误代码验证行为,则可以使用--slave-skip-errors选项掩盖(忽略)某些或所有错误。

对于诸如MyISAM之类的非事务性存储引擎,可能有一条语句仅部分更新 table 并返回错误代码。例如,在具有违反关键约束的一行的多行插入中,或者在更新某些行后杀死长的 update 语句时,可能会发生这种情况。如果在源上发生这种情况,则副本会期望执行该语句会导致相同的错误代码。如果不是,则复制 SQL 线程将如前所述停止。

如果要在源和副本上使用不同存储引擎的 table 之间进行复制,请记住,针对同一 table 版本运行同一语句可能会产生不同的错误,但针对另一版本的 table 运行时可能会产生不同的错误,否则可能会导致一个错误该 table 的版本,但其他版本除外。例如,由于MyISAM忽略外键约束,因此在源上访问InnoDBtable 的INSERTUPDATE语句可能会导致外键冲突,但是对副本上同一 table 的MyISAM版本执行的同一语句不会产生此类错误,导致复制停止。