STOP SLAVE [thread_types] [channel_option]
thread_types:
[thread_type [, thread_type] ... ]
thread_type: IO_THREAD | SQL_THREAD
channel_option:
FOR CHANNEL channel
停止从属线程。STOP SLAVE需要 REPLICATION_SLAVE_ADMIN或 SUPER特权。推荐的最佳实践是STOP SLAVE在停止从服务器之前在从服务器上执行(有关更多信息,请参见 第5.1.16节“服务器关闭过程”)。
使用基于行的日志记录格式时:如果要复制使用非事务性存储引擎的任何表,请在关闭从属服务器之前执行STOP SLAVE或 STOP SLAVE SQL_THREAD在从属服务器上执行(请参阅本节后面的 注释)。
像一样START SLAVE,此语句可以与IO_THREAD和 SQL_THREAD选项一起使用以命名要停止的一个或多个线程。请注意,“组复制”应用程序通道(group_replication_applier)没有I / O线程,只有SQL线程。SQL_THREAD因此,使用该 选项将完全停止该通道。
STOP SLAVE导致隐式提交正在进行的事务。请参见第13.3.3节“导致隐式提交的声明”。
gtid_next必须AUTOMATIC在发布此语句之前设置为 。
您可以STOP SLAVE通过设置rpl_stop_slave_timeout系统变量来控制超时之前等待的时间 。这可用于避免使用STOP SLAVE与从属服务器的不同客户端连接以及其他从属SQL语句之间的死锁 。当达到超时值时,发出客户端返回错误消息并停止等待,但该STOP SLAVE 指令仍然有效。一旦从属线程不再繁忙,STOP SLAVE则执行该语句,并且从属线程停止。
CHANGE MASTER TO在从属服务器运行时允许 某些语句,具体取决于从属SQL和I / O线程的状态。但是,在这种情况下仍支持STOP SLAVE在执行之前使用CHANGE MASTER TO。有关更多信息,请参见 第13.4.2.1节“将主表更改为语句”和 第17.4.8节“在故障转移期间切换主表”。
可选的子句使您可以命名该语句应用于哪个复制通道。提供子句可将该语句应用于 特定的复制通道。如果没有命名通道,并且不存在其他通道,则该语句将应用于默认通道。如果在使用多个通道时语句未命名通道,则该语句将停止所有通道的指定线程。该语句不能与 通道一起使用。有关更多信息,请参见第17.2.3节“复制通道”。 FOR CHANNEL channelFOR CHANNEL channelSTOP SLAVESTOP SLAVEgroup_replication_recovery
使用基于语句的复制时:在主数据库具有打开的临时表的情况下更改主数据库可能是不安全的。这是为什么不建议基于语句的临时表复制的原因之一。您可以通过检查Slave_open_temp_tables;的值来找出从属服务器上是否有任何临时表 。使用基于语句的复制时,该值在执行前应为0CHANGE MASTER TO。如果在从属服务器上打开了任何临时表,则在发出aCHANGE MASTER TO之后发出一条语句将STOP SLAVE引起 ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO 警告。
当使用多线程从属服务器(slave_parallel_workers非零值)时,作为停止工作线程的一部分,将从中继日志执行的事务序列中的所有间隙都将关闭。如果在执行语句时,从属设备意外停止(例如,由于工作线程中的错误或发出另一个线程KILL) STOP SLAVE,则中继日志中已执行事务的顺序可能会不一致。有关 更多信息,请参见 第17.5.1.33节“复制和事务不一致”。
如果当前复制事件组已修改一个或多个非事务表,则STOP SLAVE最多等待60秒以使事件组完成,除非您 为从属SQL线程发出 KILL QUERY或 KILL CONNECTION语句。如果超时后事件组仍然不完整,则会记录一条错误消息。