STOP REPLICA [thread_types] [channel_option]
thread_types:
[thread_type [, thread_type] ... ]
thread_type: IO_THREAD | SQL_THREAD
channel_option:
FOR CHANNEL channel
Stops the replication threads. From MySQL 8.0.22, use
STOP REPLICA
in place of
STOP SLAVE
, which is now
deprecated. In releases before MySQL 8.0.22, use
STOP SLAVE
.
STOP REPLICA
requires the
REPLICATION_SLAVE_ADMIN
privilege
(or the deprecated SUPER
privilege). Recommended best practice is to execute
STOP REPLICA
on the replica before stopping
the replica server (see Section 7.1.19, “The Server Shutdown Process”, for
more information).
Like START
REPLICA
, this statement may be used with the
IO_THREAD
and SQL_THREAD
options to name the replication thread or threads to be stopped.
Note that the Group Replication applier channel
(group_replication_applier
) has no
replication I/O (receiver) thread, only a replication SQL
(applier) thread. Using the SQL_THREAD
option
therefore stops this channel completely.
STOP REPLICA
causes an implicit commit of an
ongoing transaction. See Section 15.3.3, “Statements That Cause an Implicit Commit”.
gtid_next
must be set to
AUTOMATIC
before issuing this statement.
You can control how long STOP REPLICA
waits
before timing out by setting the system variable
rpl_stop_replica_timeout
(from
MySQL 8.0.26) or
rpl_stop_slave_timeout
(before
MySQL 8.0.26). This can be used to avoid deadlocks between
STOP REPLICA
and other SQL statements using
different client connections to the replica. When the timeout
value is reached, the issuing client returns an error message
and stops waiting, but the STOP REPLICA
instruction remains in effect. Once the replication threads are
no longer busy, the STOP REPLICA
statement is
executed and the replica stops.
Some CHANGE REPLICATION SOURCE TO
| CHANGE MASTER TO
statements are
allowed while the replica is running, depending on the states of
the replication threads. However, using STOP
REPLICA
prior to executing a
CHANGE REPLICATION SOURCE TO
|
CHANGE MASTER TO
statement in
such cases is still supported. See
Section 15.4.2.3, “CHANGE REPLICATION SOURCE TO Statement”,
Section 15.4.2.1, “CHANGE MASTER TO Statement”, and
Section 19.4.8, “Switching Sources During Failover”, for more
information.
The optional FOR CHANNEL
clause enables you
to name which replication channel the statement applies to.
Providing a channel
FOR CHANNEL
clause applies the
channel
STOP REPLICA
statement to a specific
replication channel. If no channel is named and no extra
channels exist, the statement applies to the default channel. If
a STOP REPLICA
statement does not name a
channel when using multiple channels, this statement stops the
specified threads for all channels. See
Section 19.2.2, “Replication Channels” for more information.
The replication channels for Group Replication
(group_replication_applier
and
group_replication_recovery
) are managed
automatically by the server instance. STOP
REPLICA
cannot be used at all with the
group_replication_recovery
channel, and
should only be used with the
group_replication_applier
channel when Group
Replication is not running. The
group_replication_applier
channel only has an
applier thread and has no receiver thread, so it can be stopped
if required by using the SQL_THREAD
option
without the IO_THREAD
option.
When the replica is multithreaded
(replica_parallel_workers
or
slave_parallel_workers
is a
nonzero value), any gaps in the sequence of transactions
executed from the relay log are closed as part of stopping the
worker threads. If the replica is stopped unexpectedly (for
example due to an error in a worker thread, or another thread
issuing KILL
) while a
STOP REPLICA
statement is executing, the
sequence of executed transactions from the relay log may become
inconsistent. See
Section 19.5.1.34, “Replication and Transaction Inconsistencies”,
for more information.
When the source is using the row-based binary logging format,
you should execute STOP REPLICA
or
STOP REPLICA SQL_THREAD
on the replica prior
to shutting down the replica server if you are replicating any
tables that use a nontransactional storage engine. If the
current replication event group has modified one or more
nontransactional tables, STOP REPLICA
waits
for up to 60 seconds for the event group to complete, unless you
issue a KILL
QUERY
or KILL
CONNECTION
statement for the replication SQL thread.
If the event group remains incomplete after the timeout, an
error message is logged.
When the source is using the statement-based binary logging
format, changing the source while it has open temporary tables
is potentially unsafe. This is one of the reasons why
statement-based replication of temporary tables is not
recommended. You can find out whether there are any temporary
tables on the replica by checking the value of
Replica_open_temp_tables
or
Slave_open_temp_tables
. When
using statement-based replication, this value should be 0 before
executing CHANGE REPLICATION SOURCE
TO
| CHANGE MASTER TO
.
If there are any temporary tables open on the replica, issuing a
CHANGE REPLICATION SOURCE TO
|
CHANGE MASTER TO
statement after
issuing a STOP REPLICA
causes an
ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO
warning.