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

15.4.2.8 停止 REPLICA 语句

STOP REPLICA [thread_types] [channel_option]

thread_types:
    [thread_type [, thread_type] ... ]

thread_type: IO_THREAD | SQL_THREAD

channel_option:
    FOR CHANNEL channel

停止复制线程。

停止 REPLICA 需要 REPLICATION_SLAVE_ADMIN 权限(或已弃用的 SUPER 权限)。推荐的最佳实践是在停止副本服务器之前在副本上执行 停止 REPLICA(参见 第 7.1.19 节,“服务器关闭过程”,以获取更多信息)。

START REPLICA 一样,这个语句可以与 IO_THREADSQL_THREAD 选项一起使用,以命名要停止的复制线程或线程。请注意,组复制 applier 通道(group_replication_applier)没有复制 I/O(receiver)线程,只有复制 SQL(applier)线程。因此,使用 SQL_THREAD 选项将完全停止该通道。

停止 REPLICA 导致当前事务的隐式提交。参见 第 15.3.3 节,“隐式提交的语句”

gtid_next 必须设置为 AUTOMATIC 才能发出这个语句。

您可以通过设置系统变量 rpl_stop_replica_timeout 来控制 停止 REPLICA 等待超时的时间。这可以避免在副本上使用不同客户端连接的 SQL 语句之间的死锁。当超时值达到时,发出客户端将返回错误消息并停止等待,但 停止 REPLICA 指令仍然有效。一旦复制线程不再忙碌,停止 REPLICA 语句将被执行,副本将停止。

一些 CHANGE REPLICATION SOURCE TO 语句可以在副本运行时使用,具体取决于复制线程的状态。然而,在执行 CHANGE REPLICATION SOURCE TO 语句之前使用 停止 REPLICA 仍然是支持的。参见 第 15.4.2.3 节,“CHANGE REPLICATION SOURCE TO 语句”第 15.4.2.1 节,“CHANGE MASTER TO 语句”第 19.4.8 节,“故障转移期间的源切换”,以获取更多信息。

可选的 FOR CHANNEL channel 子句使您可以命名该语句应用于哪个复制通道。提供 FOR CHANNEL channel 子句将 停止 REPLICA 语句应用于特定的复制通道。如果没有命名通道且没有额外的通道存在,则该语句将应用于默认通道。如果 停止 REPLICA 语句不命名通道时使用多个通道,则该语句将停止所有通道的指定线程。参见 第 19.2.2 节,“复制通道”,以获取更多信息。

组复制通道(group_replication_appliergroup_replication_recovery)由服务器实例自动管理。停止 REPLICA 不能与 group_replication_recovery 通道一起使用,仅当组复制不运行时可以与 group_replication_applier 通道一起使用。group_replication_applier 通道只有 applier 线程,没有 receiver 线程,因此可以使用 SQL_THREAD 选项而不使用 IO_THREAD 选项来停止它。

当副本是多线程的(replica_parallel_workers 的值不是零),从中继日志执行的事务序列中的任何间隙将在停止工作线程时关闭。如果副本在执行 STOP REPLICA 语句时意外停止(例如由于工作线程中的错误或其他线程发出 KILL),从中继日志执行的事务序列可能变得不一致。请参阅 第 19.5.1.34 节,“复制和事务不一致”,以获取更多信息。

当源使用基于行的二进制日志格式时,在关闭副本服务器之前,您应该在副本上执行 STOP REPLICASTOP REPLICA SQL_THREAD,如果您正在复制使用非事务存储引擎的表。如果当前复制事件组修改了一个或多个非事务表,STOP REPLICA 将等待长达 60 秒,以便事件组完成,除非您发出 KILL QUERYKILL CONNECTION 语句以停止复制 SQL 线程。如果事件组在超时后仍未完成,将记录错误消息。

当源使用基于语句的二进制日志格式时,在源上打开临时表时进行更改可能是不安全的。这是为什么不建议使用基于语句的临时表复制的原因之一。您可以通过检查 Replica_open_temp_tables 的值来确定副本上是否有临时表。当使用基于语句的复制时,该值应该在执行 CHANGE REPLICATION SOURCE TO 之前为 0。如果副本上有打开的临时表,发出 CHANGE REPLICATION SOURCE TO 语句后发出 STOP REPLICA 将导致 ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO 警告。