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