Documentation Home

13.4.2.10 STOP REPLICA 语句

STOP REPLICA [thread_types] [channel_option]

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

thread_type: IO_THREAD | SQL_THREAD

channel_option:
    FOR CHANNEL channel

停止复制线程。从 MySQL 8.0.22 开始,使用 STOP REPLICAin place of STOP SLAVE,现在已弃用。在 MySQL 8.0.22 之前的版本中,使用 STOP SLAVE.

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

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

STOP REPLICA导致正在进行的事务的隐式提交。请参阅第 13.3.3 节,“导致隐式提交的语句”

gtid_next必须 AUTOMATIC在发出此语句之前设置为。

您可以通过设置系统变量(从 MySQL 8.0.26 开始)或 (在 MySQL 8.0.26 之前) 来控制STOP REPLICA超时前等待的时间 。这可用于避免 使用与副本的不同客户端连接的其他 SQL 语句之间的死锁。当达到超时值时,发卡客户端返回错误信息并停止等待,但 指令仍然有效。一旦复制线程不再繁忙,就会执行语句并停止副本。 rpl_stop_replica_timeoutrpl_stop_slave_timeoutSTOP REPLICASTOP REPLICASTOP REPLICA

一些CHANGE REPLICATION SOURCE TO | CHANGE MASTER TO副本运行时允许使用语句,具体取决于复制线程的状态。但是,STOP REPLICA在执行 CHANGE REPLICATION SOURCE TO| 之前使用 CHANGE MASTER TO仍然支持这种情况下的声明。有关详细信息,请参阅 第 13.4.2.3 节“将复制源更改为语句”第 13.4.2.1 节“将主副本更改为语句”第 17.4.8 节“在故障转移期间切换源”

可选子句使您能够命名该语句适用于哪个复制通道。提供一个子句将 语句应用于特定的复制通道。如果没有命名通道并且不存在额外通道,则该语句适用于默认通道。如果语句在使用多个通道时没有命名通道,则该语句将停止所有通道的指定线程。有关更多信息,请参阅 第 17.2.2 节,“复制通道”FOR CHANNEL channelFOR CHANNEL channelSTOP REPLICASTOP REPLICA

组复制(group_replication_appliergroup_replication_recovery)的复制通道由服务器实例自动管理。STOP REPLICA根本不能与 group_replication_recovery通道一起使用,并且只能 group_replication_applier在组复制未运行时与通道一起使用。该 group_replication_applier通道只有一个applier线程,没有receiver线程,所以如果需要可以通过SQL_THREAD不带option的option来停止IO_THREAD

当副本是多线程的(replica_parallel_workers或者 slave_parallel_workers是一个非零值)时,作为停止工作线程的一部分,从中继日志执行的事务序列中的任何间隙都会被关闭。如果副本在执行语句时意外停止(例如,由于工作线程中的错误或另一个线程发出KILLSTOP REPLICA,则中继日志中执行的事务顺序可能会变得不一致。有关更多信息,请参阅 第 17.5.1.34 节,“复制和事务不一致”

当源使用基于行的二进制日志记录格式时,如果要复制任何使用非事务性存储引擎的表,则应在关闭副本服务器之前在副本上执行STOP REPLICA或 。STOP REPLICA SQL_THREAD如果当前复制事件组修改了一个或多个非事务性表,STOP REPLICA等待事件组完成最多 60 秒,除非您为复制 SQL 线程发出KILL QUERYorKILL CONNECTION语句。如果事件组在超时后仍未完成,则会记录一条错误消息。

当源使用基于语句的二进制日志记录格式时,在它打开临时表时更改源可能是不安全的。这是不推荐基于语句的临时表复制的原因之一。Replica_open_temp_tables您可以通过检查或 的值来了解副本上是否有任何临时表 Slave_open_temp_tables。使用基于语句的复制时,在执行CHANGE REPLICATION SOURCE TO|之前该值应为 0 CHANGE MASTER TO. 如果副本上有任何临时表打开,发出 CHANGE REPLICATION SOURCE TO| CHANGE MASTER TO发出警告后的STOP REPLICA声明 ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO