15.4.2.3 重置副本语句
RESET REPLICA [ALL] [channel_option]
channel_option:
FOR CHANNEL channel
RESET REPLICA
使副本忘记源的二进制日志中的位置。
这个语句旨在用于干净的启动;它清除复制元数据存储库,删除所有中继日志文件,并开始一个新的中继日志文件。此外,它还将SOURCE_DELAY
选项中的复制延迟重置为0,该选项是CHANGE REPLICATION SOURCE TO
语句的一部分。
所有中继日志文件都将被删除,即使它们尚未被复制SQL线程完全执行。这可能会在副本上存在,如果您已经发出STOP REPLICA
语句或副本负载很高。
在使用GTIDs的服务器(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(接收)线程,因此在运行副本上使用STOP REPLICA
语句,然后发出RESET REPLICA
语句。在Group Replication组成员上使用RESET REPLICA
,成员状态必须为OFFLINE
,即插件已加载,但成员不属于任何组。可以使用STOP GROUP REPLICATION
语句将组成员置于离线状态。
可选的FOR CHANNEL
子句允许您指定语句应用于哪个复制通道。提供channel
FOR CHANNEL
子句将channel
RESET REPLICA
语句应用于特定的复制通道。将FOR CHANNEL
子句与channel
ALL
选项组合起来将删除指定的通道。如果没有指定通道且没有额外通道,语句将应用于默认通道。没有指定通道且存在多个复制通道时,执行RESET 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
语句之前,复制连接参数将被保存在崩溃安全的InnoDB
表mysql.slave_master_info 和mysql.slave_relay_log_info 中作为RESET REPLICA 操作的一部分。它们也将保留在内存中。在服务器意外退出或故意重启后,使用 RESET REPLICA
语句,但在执行START REPLICA
语句之前,复制连接参数将从表中检索并重新应用到通道中。这适用于连接和应用程序元数据存储库的 both。
RESET REPLICA
不会更改任何复制过滤器设置(例如--replicate-ignore-table
)对受语句影响的通道。然而,RESET REPLICA ALL
删除了语句删除的通道上设置的复制过滤器。删除的通道或通道重新创建时,任何全局复制过滤器指定的复制过滤器将被复制到它们,并且不应用通道特定的复制过滤器。更多信息请见Section 19.2.5.4,“Replication Channel Based Filters”。
RESET REPLICA
导致了正在进行的事务的隐式提交。见Section 15.3.3,“Statements That Cause an Implicit Commit”。
如果复制 SQL 线程在复制临时表时被中断,并且RESET REPLICA 是被执行的,这些复制的临时表将在副本上被删除。
在使用NDB
存储引擎的 NDB 集群副本 SQL 节点上,RESET REPLICA
将清除mysql.ndb_apply_status 表。你应该注意NDB
存储引擎使用NDB
,因此在集群中的所有 SQL 节点上共享。
你可以通过在执行SET
GLOBAL @@
ndb_clear_apply_status=OFF
之前,使用SET
语句来覆盖这个行为,以保持副本不删除ndb_apply_status 表在这种情况下。