6.2.2.2使用带有InnoDB集群的MySQL克隆

在MySQL 8.0.17中,InnoDB集群集成了MySQL Clone插件,以提供加入实例的自动配置。检索群集数据的过程使实例可以与群集同步称为分布式恢复。当实例需要恢复群集的事务时,我们区分捐赠,它是提供数据的集群实例,以及接收机,它是接收来自捐赠者的数据的实例。在以前的版本中,Group Replication只提供异步复制来恢复加入实例所需的事务,以便与集群同步,以便它能够加入集群。对于具有大量以前处理过的事务的集群,新实例在能够加入集群之前可能需要很长时间才能恢复所有事务。或者,已经清除了gtid的集群(例如作为常规维护的一部分)可能会丢失恢复新实例所需的一些事务。在这种情况下,唯一的替代方法是使用MySQL Enterprise Backup等工具手动提供实例,如下所示使用MySQL企业备份与组复制

MySQL Clone为实例提供了一种替代方法,以恢复与群集同步所需的事务。MySQL Clone而不是依赖异步复制来恢复事务,而不是捐赠实例上的数据的快照,然后将快照传送到接收器。

警告

在克隆操作期间,接收器中所有以前的数据都会被销毁。所有没有存储在表中的MySQL设置都被维护。

一旦克隆操作将快照传输到接收器,如果群集在传输快照时已处理事务,则异步复制用于恢复与群集同步的接收器的任何所需数据。这可以比使用异步复制恢复所有事务的实例更效率,避免了由清除的GTID引起的任何问题,使您能够快速为InnoDB集群提供新实例。有关更多信息,请参阅克隆插件克隆分布式恢复

与使用MySQL Clone相比,增量恢复是加入集群的实例仅使用异步复制从集群恢复实例的过程。当InnoDB集群被配置为使用MySQL克隆时,加入集群的实例使用MySQL克隆或增量恢复来恢复集群的事务。默认情况下,集群会自动选择最合适的方法,但是您可以选择配置此行为,例如强制克隆,以替换已经由联接实例处理的任何事务。当你在交互式模式下使用MySQL Shell时,默认情况下,如果集群不确定它是否可以继续恢复,它会提供交互式提示。本节描述提供的不同选项,以及影响您可以选择哪些选项的不同场景。

此外,输出.status ()的成员恢复状态包括恢复进度信息,使您能够轻松监控恢复操作,无论他们使用MySQL克隆或增量恢复。InnoDB Cluster的输出提供了关于使用MySQL Clone实例的附加信息.status ()

6.2.2.2.1使用MySQL克隆的集群

使用MySQL克隆的InnoDB集群提供以下附加行为。

dba.createCluster ()和mysql克隆

从8.0.17版本开始,默认情况下,当在MySQL克隆插件可用的实例上创建新集群时,会自动安装该集群,并将集群配置为支持克隆。已按照要求创建InnoDB集群恢复帐户backup_admin.特权。

设定disableclone.布尔选项真正的禁用集群的MySQL克隆。在这种情况下,会为这个配置添加一个元数据条目,如果安装了MySQL Clone插件,则会卸载它。你可以设置disableclone.当你发行时的选择权dba.createCluster (),或在集群运行时使用.setOption ()

.Addinstance(实例)和mysql克隆

Mysql克隆可以用于加入实例如果新实例正在运行MySQL 8.0.17或更高版本,并且集群中至少有一个donor(包括在group_replication_group_seedslist)运行MySQL 8.0.17或更高版本。使用MySQL克隆的集群遵循在添加实例到集群此外,还可以选择如何传输从集群恢复实例所需的数据。如何.Addinstance(实例)行为取决于以下因素:

  • 是否支持MySQL克隆。

  • 增量恢复是否可能,这取决于二进制日志的可用性。例如,如果捐赠实例具有所需的所有二进制日志(GTID_PURGED是空的)然后可以增量恢复。如果没有群集实例所需的所有二进制日志,则无法进行增量恢复。

  • 增量恢复是否合适。尽管增量恢复是可能的,因为它有可能与实例上已经存在的数据发生冲突,但是要检查donor和receiver上的GTID集,以确保增量恢复是适当的。以下是比较的可能结果:

    • New:接收端为空GTID_EXECUTEDGTID集

    • 完全相同:接收方的GTID集与供方的GTID集完全相同

    • 可恢复的:接收方有一个缺少事务的GTID集合,但是可以从捐赠方恢复这些事务

    • 不可恢复:捐赠方有一个缺少事务的GTID集合,可能它们已经被清除

    • 分化:供体和受者的GTID集合发生分化

    当比较结果为“Identical”或“Recoverable”时,建议采用增量恢复。当比较结果被确定为不可恢复或发散时,增量恢复是不合适的。

    对于被认为是新的实例,不能认为增量恢复是不合适的,因为不可能确定二进制日志是否已被清除,甚至是GTID_PURGEDGTID_EXECUTED变量重置。或者,它可能是服务器已经在二进制日志和GTID启用之前处理了事务。因此,在交互模式下,您必须确认您要使用增量恢复。

  • 国家的状态gtidSetIsComplete选择。如果您确定已经使用完整的GTID集创建了一个集群,因此可以在不需要额外确认的情况下将具有空GTID集的实例添加到集群中,那么请设置集群级别gtidSetIsComplete布尔选项真正的

    警告

    设置gtidSetIsComplete选项真正的意味着连接服务器被恢复,不管它们包含什么数据,谨慎使用。如果试图添加一个应用了事务的实例,则有数据损坏的风险。

这些因素的组合会影响实例在发出问题时加入集群的方式.addinstance()。的康复选项设置为汽车默认情况下,这意味着在MySQL Shell的交互模式下,群集选择从群集中恢复实例的最佳方法,提示向您建议您如何继续。换句话说,群集建议使用MySQL克隆或基于最佳方法以及服务器支持的累加恢复。如果您不使用交互式模式并脚本伪装MySQL shell,则必须设置康复到要使用的恢复类型克隆增量。本节解释不同的可能场景。

当你在交互式模式下使用MySQL Shell时,添加实例的所有可能选项的主提示符是:

请选择恢复方法[c] leon / [i] ncrence resuctog / [a] bort(默认克隆):

根据提到的因素,您可能无法提供所有这些选项。本节稍后描述的方案解释了您提供的哪些选项。此提示提供的选项是:

  • 克隆:选择此选项将捐赠者克隆到要添加到集群的实例,并删除该实例包含的任何事务。MySQL克隆插件会自动安装。已按照要求创建InnoDB集群恢复帐户backup_admin.特权。假设您正在添加一个空的实例(没有处理任何事务)或包含您不想保留的事务,选择Clone选项。然后,集群使用MySQL Clone用来自捐赠集群成员的快照完全覆盖连接实例。若要默认使用此方法并禁用此提示,请设置集群的康复选项克隆

  • 增量恢复选择此选项以使用增量恢复将集群处理的所有事务恢复到使用异步复制的联接实例。如果您确定集群处理的所有更新都是在启用GTID的情况下完成的,并且没有清除的事务,并且新实例包含与集群或其子集相同的GTID集,那么增量恢复是合适的。若要默认使用此方法,请设置康复选项增量

上述因素的组合会影响下列提示符中哪些选项是可用的:

请注意

如果group_replication_clone_threshold如果在AdminAPI外部手动更改了系统变量,那么集群可能会决定使用克隆恢复,而不是遵循以下场景。

  • 在这种情况下

    • 增量恢复是可能的

    • 增量恢复不合适

    • 支持克隆

    您可以在任何选项之间进行选择。建议您使用MySQL克隆,默认值。

  • 在这种情况下

    • 增量恢复是可能的

    • 增量恢复是合适的

    没有提示,使用增量恢复。

  • 在这种情况下

    • 增量恢复是可能的

    • 增量恢复不合适

    • 不支持克隆或禁用克隆

    你不能使用MySQL克隆添加实例到集群。您会得到提示,推荐的选项是继续增量恢复。

  • 在这种情况下

    • 增量恢复是不可能的

    • 不支持克隆或禁用克隆

    不能将实例添加到集群和错误:必须在将其添加到目标群集之前克隆或完全配置目标实例。cluster.addinstance:需要实例配置(RuntimeError)显示。这可能是从所有群集实例中清除二进制日志的结果。建议通过升级群集或设置来使用mysql克隆disableclone.选项错误的

  • 在这种情况下

    • 增量恢复是不可能的

    • 支持克隆

    你只能使用MySQL克隆添加实例到集群。这可能是集群缺少二进制日志的结果,例如当二进制日志被清除时。

一旦您从提示符中选择了一个选项,默认情况下,将显示实例从集群中恢复事务的进度。此监视使您能够检查恢复阶段的工作情况,以及实例加入集群并联机需要多长时间。要取消对恢复阶段的监视,请发出控制+ C

.checkInstanceState ()和mysql克隆

.checkInstanceState ()运行操作以验证针对使用MySQL克隆的群集的实例,如果实例没有二进制日志,例如因为它们被清除但克隆可用而不禁用(disableclone.错误的)操作提供了可以使用克隆的警告。例如:

不能在实例上恢复集群事务,但是,克隆是可用的,可以在将其添加到集群时使用。{“原因”:“all_purged”,“状态”:“警告”}

同样,在克隆不可用或已被禁用的实例上,例如,不可用二进制日志,例如因为它们被清除,则输出包括:

群集事务无法在实例上恢复。{“原因”:“all_purged”,“状态”:“警告”}
dba.checkinstanconfiguration()和mysql克隆

dba.checkinstanconfiguration()操作是针对一个实例运行MySQL克隆可用,但它被禁用,一个警告显示。