Documentation Home

13.4.2.5 RESET REPLICA 语句

RESET REPLICA [ALL] [channel_option]

channel_option:
    FOR CHANNEL channel

RESET REPLICA使副本忘记它在源的二进制日志中的位置。从 MySQL 8.0.22 开始,使用 RESET REPLICA代替 RESET SLAVE,该版本已弃用。在 MySQL 8.0.22 之前的版本中,使用 RESET SLAVE.

该声明旨在用于一个干净的开始;它清除复制元数据存储库,删除所有中继日志文件,并启动一个新的中继日志文件。SOURCE_DELAY它还将| 指定的复制延迟重置为 0 MASTER_DELAY语句的选项 CHANGE REPLICATION SOURCE TO (来自 MySQL 8.0.23)或CHANGE MASTER TO语句(MySQL 8.0.23 之前)。

笔记

所有中继日志文件都被删除,即使它们还没有被复制 SQL 线程完全执行。(如果您已发出 STOP REPLICA声明或副本负载很高,则副本可能存在这种情况。)

对于正在使用 GTID 的服务器 ( gtid_modeis ON),发布RESET REPLICA 对 GTID 执行历史没有影响。该语句不会更改gtid_executedor gtid_purgedmysql.gtid_executed表的值。如果您需要重置 GTID 执行历史记录,请使用RESET MASTER,即使启用 GTID 的服务器是禁用二进制日志记录的副本。

RESET REPLICA需要 RELOAD特权。

要使用RESET REPLICA,必须停止复制 SQL 线程和复制 I/O(接收方)线程,因此 STOP REPLICA在发出RESET REPLICA. 要RESET REPLICA在 Group Replication 组成员上使用,成员状态必须为 OFFLINE,这意味着插件已加载但该成员当前不属于任何组。STOP GROUP REPLICATION可以使用语句 使组成员脱机。

可选子句使您能够命名该语句适用于哪个复制通道。提供一个子句将 语句应用于特定的复制通道。将子句与 选项结合使用会删除指定的频道。如果没有命名通道并且不存在额外通道,则该语句适用于默认通道。当存在多个复制通道时发出不带子句的语句会删除 所有复制通道并仅重新创建默认通道。有关更多信息,请参阅第 17.2.2 节,“复制通道”FOR CHANNEL channelFOR CHANNEL channelRESET REPLICAFOR CHANNEL channelALLRESET REPLICA ALLFOR CHANNEL channel

RESET REPLICA不更改任何复制连接参数,包括源的主机名和端口、复制用户帐户及其密码、 PRIVILEGE_CHECKS_USER帐户、 REQUIRE_ROW_FORMAT选项、 REQUIRE_TABLE_PRIMARY_KEY_CHECK选项和ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 选项。如果要更改任何复制连接参数,可以 在服务器启动后使用CHANGE REPLICATION SOURCE TO语句(来自 MySQL 8.0.23)或 语句(MySQL 8.0.23 之前)来执行此操作。CHANGE MASTER TO如果要删除所有复制连接参数,请使用 RESET REPLICA ALL. RESET REPLICA ALL还清除 | IGNORE_SERVER_IDS设置的列表 . 当你使用过CHANGE REPLICATION SOURCE TOCHANGE MASTER TORESET REPLICA ALL,如果你想再次使用该实例作为副本,你需要发出一个 CHANGE REPLICATION SOURCE TO| CHANGE MASTER TO服务器启动后的语句指定新的连接参数。

从 MySQL 8.0.27 开始,您可以GTID_ONLY 在语句上设置选项CHANGE REPLICATION SOURCE TO以停止复制通道在复制元数据存储库中保留文件名和文件位置。当您发出一条RESET REPLICA语句时,复制元数据存储库将同步。RESET REPLICA ALL删除而不是更新存储库,因此它们是隐式同步的。

如果服务器意外退出或在发布之后RESET REPLICA但在发布之前故意重启START REPLICA,复制连接参数的保留取决于用于复制元数据的存储库:

  • 在 服务器上设置master_info_repository=TABLErelay_log_info_repository=TABLE 时(这是 MySQL 8.0 的默认设置),复制连接参数将保留在崩溃安全InnoDB表中 mysql.slave_master_infomysql.slave_relay_log_info作为 RESET REPLICA操作的一部分。它们也保留在内存中。RESET REPLICA在发出后但发出前 服务器意外退出或故意重启START REPLICA,复制连接参数从表中检索并重新应用于通道。这种情况从 MySQL 8.0.13 开始适用于连接元数据存储库,从 MySQL 8.0.19 开始适用于应用程序元数据存储库。

  • 如果 master_info_repository=FILErelay_log_info_repository=FILE 在服务器上设置,从 MySQL 8.0 开始弃用,或者 MySQL 服务器版本早于上面指定的版本,复制连接参数仅保留在内存中。如果副本mysqldRESET REPLICA由于服务器意外退出或故意重启而在发出后立即重启,连接参数将丢失。在这种情况下,您必须在服务器启动后发出CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO 语句(在 MySQL 8.0.23 之前)以重新指定发出前的连接参数 START REPLICA

RESET REPLICA不会更改 --replicate-ignore-table受该语句影响的通道的任何复制过滤器设置(例如 )。但是,RESET REPLICA ALL删除在语句删除的通道上设置的复制过滤器。重新创建已删除的一个或多个通道时,为副本指定的任何全局复制过滤器都会复制到它们,并且不会应用任何通道特定的复制过滤器。有关详细信息,请参阅 第 17.2.5.4 节,“基于复制通道的过滤器”

RESET REPLICA导致正在进行的事务的隐式提交。请参阅第 13.3.3 节,“导致隐式提交的语句”

如果复制 SQL 线程在停止和RESET REPLICA发出时正在复制临时表,这些复制的临时表将在副本上删除。

RESET REPLICA不会重置心跳周期或SSL_VERIFY_SERVER_CERT

笔记

在 NDB Cluster 副本 SQL 节点上使用时,RESET REPLICA清除 mysql.ndb_apply_status表。ndb_apply_status在使用这个使用 存储引擎的语句时,您应该牢记, NDB因此由连接到集群的所有 SQL 节点共享。

您可以通过在执行之前 发出来覆盖此行为 ,这可以防止副本在这种情况下 清除 表。SET GLOBAL @@ndb_clear_apply_status=OFFRESET REPLICAndb_apply_status