Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.4.2.5 停止副本语句

STOP REPLICA [thread_types] [channel_option]

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

thread_type: IO_THREAD | SQL_THREAD

channel_option:
    FOR CHANNEL channel

停止副本线程。

STOP REPLICA 需要REPLICATION_SLAVE_ADMIN特权(或弃用的SUPER特权)。推荐的最佳实践是,在停止副本服务器(见第7.1.19节,“服务器关闭过程”)之前执行 STOP REPLICA 语句。

START REPLICA语句类似,这个语句可以与 IO_THREADSQL_THREAD 选项一起使用,以命名要停止的副本线程或线程。注意,Group Replication applier channel (group_replication_applier) 没有复制 I/O(接收)线程,只有复制 SQL(applier)线程。使用 SQL_THREAD 选项因此停止该通道完全。

STOP REPLICA 会隐式提交当前事务。见第15.3.3节,“隐式提交语句”

gtid_next 必须设置为 AUTOMATIC 之前执行该语句。

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

一些CHANGE REPLICATION SOURCE TO 语句允许在副本运行时执行,取决于副本线程的状态。然而,在执行CHANGE REPLICATION SOURCE TO 语句之前使用 STOP REPLICA 语句仍然支持。见第15.4.2.2节,“CHANGE REPLICATION SOURCE TO 语句”,和第19.4.8节,“在故障转移期间切换源”,了解更多信息。

可选的FOR CHANNEL channel子句允许您指定语句应用于哪个复制通道。提供FOR CHANNEL channel子句将STOP REPLICA语句应用于特定的复制通道。如果没有指定通道且没有额外通道,语句将应用于默认通道。如果STOP REPLICA语句没有指定通道且使用多个通道,这个语句将停止指定的线程对于所有通道。请参阅第19.2.2节,“复制通道”获取更多信息。

Group Replication (group_replication_appliergroup_replication_recovery) 的复制通道由服务器实例自动管理。STOP REPLICA不能与group_replication_recovery通道一起使用,并且在 Group Replication 不运行时只能使用group_replication_applier通道。group_replication_applier通道只有一个应用线程,没有接收线程,因此可以在需要时使用SQL_THREAD选项,而不使用IO_THREAD选项。

当复制服务器是多线程的(replica_parallel_workers的值不是零)时,任何relay日志中执行的事务序列中的空隙将在停止工作线程时被关闭。如果复制服务器在执行STOP REPLICA语句时突然停止(例如,由于工作线程的错误或另一个线程发出KILL语句),从relay日志中执行的事务序列可能会变得不一致。请参阅第19.5.1.34节,“复制和事务不一致”获取更多信息。

当源服务器使用行基于的二进制日志格式时,您应该在关闭复制服务器之前在复制服务器上执行STOP REPLICASTOP REPLICA SQL_THREAD语句,如果您正在复制使用非事务存储引擎的表。如果当前复制事件组已经修改了一个或多个非事务表,STOP REPLICA将等待最长60秒以等待事件组完成,除非您发出KILL QUERYKILL CONNECTION语句。如果事件组仍然不完整,错误信息将被记录。

当源使用语句级别二进制日志格式时,改变源同时存在临时表时可能不安全。这是临时表语句级别复制的不推荐原因。你可以通过检查Replica_open_temp_tables的值来确定是否存在临时表在复制服务器上。当使用语句级别复制时,在执行CHANGE REPLICATION SOURCE TO语句前,这个值应该为0。否则,在复制服务器上存在临时表时,执行CHANGE REPLICATION SOURCE TO语句后,会出现一个ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO警告。