使用 MySQL Clone 的 InnoDB 集群提供以下附加行为。
默认情况下,在 MySQL Clone 插件可用的实例上创建新集群时,该插件会自动安装,并且集群配置为支持克隆。InnoDB 集群恢复帐户使用所需的 BACKUP_ADMIN
权限创建。
将 disableClone
布尔选项设置为 true
可禁用集群的 MySQL Clone。在这种情况下,将为此配置添加元数据条目,如果已安装 MySQL Clone 插件,则会卸载该插件。您可以在发出 dba.createCluster()
时或在集群使用
运行时随时设置 Cluster
.setOption()disableClone
选项。
如果新实例运行的是 MySQL 8.0.17 或更高版本,并且集群中至少有一个捐赠者(包含在 group_replication_group_seeds
列表中)运行的是 MySQL 8.0.17 或更高版本,则可以使用 MySQL Clone 进行加入 instance
。使用 MySQL Clone 的集群遵循 第 7.4.4 节“向 InnoDB 集群添加实例” 中记录的行为,并添加了如何传输从集群恢复实例所需数据的可能选择。
的行为取决于以下因素Cluster
.addInstance(instance
)
是否支持 MySQL Clone。
是否可以进行增量恢复,这取决于二进制日志的可用性。例如,如果捐赠者实例拥有所有必需的二进制日志(
GTID_PURGED
为空),则可以进行增量恢复。如果没有集群实例拥有所有必需的二进制日志,则无法进行增量恢复。-
增量恢复是否合适。即使可以进行增量恢复,但因为它有可能与实例上已有的数据发生冲突,因此会检查捐赠者和接收者上的 GTID 集,以确保增量恢复是合适的。以下是比较的可能结果
新:接收者具有空的
GTID_EXECUTED
GTID 集相同:接收者的 GTID 集与捐赠者的 GTID 集相同
可恢复:接收者的 GTID 集缺少事务,但可以从捐赠者恢复这些事务
不可恢复:捐赠者的 GTID 集缺少事务,可能已清除这些事务
已分叉:捐赠者和接收者的 GTID 集已分叉
当比较结果确定为“相同”或“可恢复”时,增量恢复被认为是合适的。当比较结果确定为“不可恢复”或“已分叉”时,增量恢复被认为是不合适的。
对于被视为“新”的实例,增量恢复不能被认为是合适的,因为无法确定二进制日志是否已清除,甚至无法确定
GTID_PURGED
和GTID_EXECUTED
变量是否已重置。或者,可能是服务器在启用二进制日志和 GTID 之前已经处理了事务。因此,在交互模式下,您必须确认要使用增量恢复。 -
gtidSetIsComplete
选项的状态。如果您确定已使用完整的 GTID 集创建了集群,因此可以将具有空 GTID 集的实例添加到该集群而无需额外确认,请将集群级别gtidSetIsComplete
布尔选项设置为true
。警告将
gtidSetIsComplete
选项设置为true
意味着将恢复加入的服务器,而不管它们包含哪些数据,请谨慎使用。如果您尝试添加已应用事务的实例,则可能会导致数据损坏。
这些因素的组合会影响在发出
时实例如何加入集群。Cluster
.addInstance()recoveryMethod
选项默认设置为 auto
,这意味着在 MySQL Shell 的交互模式下,集群会选择从集群恢复实例的最佳方式,并提示您如何继续。换句话说,集群会根据最佳方法和服务器支持的内容建议使用 MySQL Clone 或增量恢复。如果您没有使用交互模式而是在编写 MySQL Shell 脚本,则必须将 recoveryMethod
设置为您要使用的恢复类型 - clone
或 incremental
。本节介绍了不同的可能情况。
在交互模式下使用 MySQL Shell 时,包含添加实例的所有可能选项的主提示如下
Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone):
根据上述因素,您可能不会看到所有这些选项。本节稍后介绍的场景说明了您会看到哪些选项。此提示提供的选项包括
克隆:选择此选项可将捐赠者克隆到您要添加到集群的实例,删除该实例包含的任何事务。MySQL Clone 插件会自动安装。InnoDB 集群恢复帐户使用所需的
BACKUP_ADMIN
权限创建。假设您要添加一个为空(未处理任何事务)或包含您不想保留的事务的实例,请选择“克隆”选项。然后,集群使用 MySQL Clone 用来自捐赠者集群成员的快照完全覆盖加入的实例。要默认使用此方法并禁用此提示,请将集群的recoveryMethod
选项设置为clone
。增量恢复:选择此选项可使用增量恢复通过异步复制将集群处理的所有事务恢复到加入的实例。如果您确定集群处理过的所有更新都是在启用 GTID 的情况下完成的,没有清除任何事务,并且新实例包含与集群相同的 GTID 集或其子集,则增量恢复是合适的。要默认使用此方法,请将
recoveryMethod
选项设置为incremental
。
上述因素的组合会影响在提示符下可用的选项,如下所示
如果在 AdminAPI 之外手动更改了 group_replication_clone_threshold
系统变量,则集群可能会决定使用克隆恢复,而不是遵循以下情况。
-
在以下情况下
可以进行增量恢复
增量恢复不合适
支持克隆
您可以选择任何选项。建议您使用默认的 MySQL Clone。
-
在以下情况下
可以进行增量恢复
增量恢复合适
您不会看到提示,并且会使用增量恢复。
-
在以下情况下
可以进行增量恢复
增量恢复不合适
不支持或禁用了克隆
您无法使用 MySQL Clone 将实例添加到集群。您会看到提示,并且建议的选项是继续进行增量恢复。
-
在以下情况下
无法进行增量恢复
不支持或禁用了克隆
您无法将实例添加到集群,并且会显示 错误:目标实例必须先克隆或完全配置,然后才能添加到目标集群。Cluster.addInstance:需要配置实例 (RuntimeError)。这可能是由于已从所有集群实例中清除二进制日志的结果。建议使用 MySQL Clone,方法是升级集群或将
disableClone
选项设置为false
。 -
在以下情况下
无法进行增量恢复
支持克隆
您只能使用 MySQL Clone 将实例添加到集群。这可能是由于集群缺少二进制日志的结果,例如当它们已被清除时。
默认情况下,从提示中选择一个选项后,会显示实例从集群恢复事务的进度。此监视功能使您能够检查恢复阶段是否正常工作,以及实例加入集群并联机所需的时间。要取消对恢复阶段的监视,请按 CONTROL+C。