RESET REPLICA [ALL] [channel_option]
channel_option:
FOR CHANNEL channel
RESET REPLICA 会使副本忘记其在源二进制日志中的位置。
此语句用于全新启动;它会清除复制元数据存储库,删除所有中继日志文件,并启动一个新的中继日志文件。它还会将使用 CHANGE REPLICATION SOURCE TO 语句的 SOURCE_DELAY 选项指定的复制延迟重置为 0。
所有中继日志文件都会被删除,即使它们尚未由复制 SQL 线程完全执行。(如果已发出 STOP REPLICA 语句或副本负载过高,则副本上可能会出现这种情况。)
对于使用 GTID 的服务器(gtid_mode 为 ON),发出 RESET REPLICA 对 GTID 执行历史记录没有影响。该语句不会更改 gtid_executed 或 gtid_purged 的值,也不会更改 mysql.gtid_executed 表。如果需要重置 GTID 执行历史记录,请使用 RESET BINARY LOGS AND GTIDS,即使启用了 GTID 的服务器是禁用了二进制日志记录的副本。
要使用 RESET REPLICA,需要 RELOAD 权限。
要使用 RESET REPLICA,复制 SQL 线程和复制 I/O(接收器)线程必须停止,因此在运行的副本上,请在发出 RESET REPLICA 之前使用 STOP REPLICA。要在组复制组成员上使用 RESET REPLICA,成员状态必须为 OFFLINE,这意味着插件已加载,但该成员当前不属于任何组。可以使用 STOP GROUP REPLICATION 语句使组成员脱机。
可选的 FOR CHANNEL 子句使您可以命名该语句应用于哪个复制通道。提供 channelFOR CHANNEL 子句会将 channelRESET REPLICA 语句应用于特定的复制通道。将 FOR CHANNEL 子句与 channelALL 选项组合使用将删除指定的通道。如果未命名通道且不存在其他通道,则该语句将应用于默认通道。当存在多个复制通道时,在没有 FOR CHANNEL 子句的情况下发出 channelRESET REPLICA ALL 语句将删除所有复制通道,并且仅重新创建默认通道。有关更多信息,请参阅 第 19.2.2 节“复制通道”。
RESET REPLICA 不会更改任何复制连接参数,包括源的主机名和端口、复制用户帐户及其密码、PRIVILEGE_CHECKS_USER 帐户、REQUIRE_ROW_FORMAT 选项、REQUIRE_TABLE_PRIMARY_KEY_CHECK 选项和 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 选项。如果要更改任何复制连接参数,可以在服务器启动后使用 CHANGE REPLICATION SOURCE TO 语句执行此操作。如果要删除所有复制连接参数,请使用 RESET REPLICA ALL。RESET REPLICA ALL 还会清除由 CHANGE REPLICATION SOURCE TO 设置的 IGNORE_SERVER_IDS 列表。使用 RESET REPLICA ALL 后,如果要再次将实例用作副本,则需要在服务器启动后发出 CHANGE REPLICATION SOURCE TO 语句以指定新的连接参数。
您可以在 CHANGE REPLICATION SOURCE TO 语句上设置 GTID_ONLY 选项,以阻止复制通道在复制元数据存储库中持久化文件名和文件位置。当您发出 RESET REPLICA 时,复制元数据存储库会同步。RESET REPLICA ALL 会删除而不是更新存储库,因此它们会隐式同步。
如果在发出 RESET REPLICA 之后但在发出 START REPLICA 之前服务器意外退出或有意重启,则复制连接参数会作为 RESET REPLICA 操作的一部分保留在崩溃安全的 InnoDB 表 mysql.slave_master_info 和 mysql.slave_relay_log_info 中。它们也保留在内存中。如果在发出 RESET REPLICA 之后但在发出 START REPLICA 之前服务器意外退出或有意重启,则会从表中检索复制连接参数并将其重新应用于通道。这适用于连接和应用器元数据存储库。
RESET REPLICA 不会更改受该语句影响的通道的任何复制过滤器设置(例如 --replicate-ignore-table)。但是,RESET REPLICA ALL 会删除在由该语句删除的通道上设置的复制过滤器。重新创建已删除的通道时,会将为副本指定的任何全局复制过滤器复制到这些通道,并且不会应用特定于通道的复制过滤器。有关更多信息,请参阅 第 19.2.5.4 节“基于复制通道的过滤器”。
RESET REPLICA 会导致隐式提交正在进行的事务。请参阅 第 15.3.3 节“导致隐式提交的语句”。
如果复制 SQL 线程在停止时正在复制临时表,并且发出了 RESET REPLICA,则这些复制的临时表将在副本上被删除。
当在 NDB Cluster 副本 SQL 节点上使用时,RESET REPLICA 会清除 mysql.ndb_apply_status 表。使用此语句时,您应该记住,ndb_apply_status 使用 NDB 存储引擎,因此由附加到集群的所有 SQL 节点共享。
您可以通过在执行 RESET REPLICA 之前发出 SET GLOBAL @@ndb_clear_apply_status=OFF 来覆盖此行为,这可以防止副本在这种情况下清除 ndb_apply_status 表。