MySQL的SQL语句 -复制语句(9)- 控制副本服务器的 SQL 语句 - STOP REPL

STOP REPLICA | SLAVE 语句
1. STOP {REPLICA | SLAVE} [thread_types] [channel_option]
2. 
3. thread_types:
4.     [thread_type [, thread_type] ... ]
5. 
6. thread_type: IO_THREAD | SQL_THREAD
7. 
8. channel_option:
9.     FOR CHANNEL channel

此语句停止复制线程。从 MySQL 8.0.22 开始,使用 STOP REPLICA 来代替 STOP SLAVE,后者现在已被弃用。在 MySQL 8.0.22 之前的版本中,请使用 STOP SLAVE。

STOP REPLICA | SLAVE 需要 REPLICATION_SLAVE_ADMIN 权限(或不推荐使用的 SUPER 权限)。建议的最佳做法是在停止副本服务器之前在副本上执行 STOP REPLICA | SLAVE。

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

STOP REPLICA | SLAVE 导致正在进行的事务隐式提交。

在执行此语句之前,gtid_next 必须设置为 AUTOMATIC。

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

根据复制线程的状态,在副本运行时允许某些 CHANGE MASTER TO 语句。但是,在这种情况下,仍然支持在执行 CHANGE MASTER TO 之前使用 STOP REPLICA | SLAVE。

可选的 FOR CHANNEL channel 子句使您能够命名该语句应用于哪个复制通道。提供 FOR CHANNEL channel 子句将 STOP REPLICA | SLAVE 语句应用于特定的复制通道。如果没有指定通道且不存在额外通道,则语句将应用于默认通道。如果 STOP REPLICA | SLAVE 语句在使用多个通道时没有命名通道,则此语句将停止所有通道的指定线程。此语句不能用于 group_replication_recovery 通道。

当副本是多线程(slave_parallel_workers 是非零值)时,中继日志执行的事务序列中的任何间隙都会作为停止工作线程的一部分而关闭。如果在执行 STOP REPLICA | SLAVE 语句时副本意外停止(例如,由于工作线程中的错误,或由于其他线程发出 KILL 命令),则中继日志中执行的事务次序可能会不一致。

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

当源使用基于语句的二进制日志记录格式时,在打开临时表时更改源可能不安全。这就是不建议对临时表进行基于语句的复制的原因之一。您可以通过检查 Slave_open_temp_tables 的值来确定副本上是否有临时表;当使用基于语句的复制时,在执行 CHANGE MASTER TO 之前,该值应为 0。如果副本上有任何打开的临时表,在执行 STOP REPLICA | SLAVE 之后执行 CHANGE MASTER TO 语句会导致 ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO 警告。

官方网址:
https://dev.mysql.com/doc/refman/8.0/en/stop-replica.html

MySQL的SQL语句 -复制语句(9)- 控制副本服务器的 SQL 语句 - STOP REPL

上一篇:MSSQL 2014数据库Alwayson下日志过大,压缩日志的处理方法


下一篇:.net core3.*部署到【centos7】服务后,wwwroot下的静态资源无法访问,显示404