STOP SLAVE语句
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
在停止从服务器之前在从服务器上执行(有关更多信息,请参见“服务器关闭过程”)。
使用基于行的日志记录格式时:如果要复制使用非事务性存储引擎的任何表,请在关闭从属服务器之前执行STOP SLAVE
或STOP SLAVE SQL_THREAD
在从属服务器上执行(请参阅本节后面的注释)。
像一样START SLAVE
,此语句可以与IO_THREAD
和SQL_THREAD
选项一起使用以命名要停止的一个或多个线程。请注意,“组复制”应用程序通道(group_replication_applier
)没有I / O线程,只有SQL线程。SQL_THREAD
因此,使用该选项将完全停止该通道。
STOP SLAVE
导致隐式提交正在进行的事务。请参见“START TRANSACTION,COMMIT和ROLLBACK语句”。
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
。有关更多信息,请参见“ALTER TABLE语句”和“在故障转移期间切换主表”。
可选的子句使您可以命名该语句应用于哪个复制通道。提供子句可将该语句应用于特定的复制通道。如果没有命名通道,并且不存在其他通道,则该语句将应用于默认通道。如果在使用多个通道时语句未命名通道,则该语句将停止所有通道的指定线程。该语句不能与通道一起使用。有关更多信息,请参见“复制通道”。FOR CHANNEL channel
FOR CHANNEL channel
STOP SLAVE
STOP SLAVE
group_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
,则从中继日志执行的事务序列可能会不一致。有关更多信息,请参见“复制和事务不一致”。
如果当前复制事件组已修改一个或多个非事务表,则STOP SLAVE最多等待60秒以使事件组完成,除非您为从属SQL线程发出KILL QUERY
或KILL CONNECTION
语句。如果超时后事件组仍然不完整,则会记录一条错误消息。