6.3.3 ReplicaSet添加实例

当您已经创建了一个ReplicaSet可以使用ReplicaSet.addInstance ()操作添加一个实例作为一个只读二级ReplicaSet当前主要的复制品。的主要ReplicaSet必须在这个操作过程中可获得的和可用的。MySQL复制添加实例和主之间的配置,使用一个自动创建MySQL账户和一个随机密码。实例是一个操作二次之前,它必须与主同步。这个过程称为复苏,InnoDB ReplicaSet支持不同配置的方法recoveryMethod选择。

为一个实例能够加入ReplicaSet,各种先决条件必须满足。他们是自动检查ReplicaSet.addInstance ()操作失败,如果发现任何问题。使用dba.configureReplicaSetInstance ()验证和配置二进制日志和复制相关的选项前添加一个实例。MySQL壳连接到目标实例使用相同的用户名和密码用于获得ReplicaSet处理对象。的所有实例ReplicaSet预计将有相同的赠款和相同的管理员帐户的密码。一个定制的管理员帐户可以创建所需的经费而配置了一个实例dba.configureReplicaSetInstance ()。看到配置InnoDB ReplicaSet实例

复苏方法InnoDB ReplicaSet

当新实例被添加到一个InnoDB ReplicaSet他们需要提供与现有的数据,它包含。这可以自动完成使用下列方法之一:

  • MySQL克隆,从一个在线实例一个快照,然后替换新实例上的任何数据快照。MySQL克隆非常适合加入一个新的空白实例为InnoDB ReplicaSet。它不依赖于有一个完整的二进制日志的所有事务应用InnoDB ReplicaSet。

    警告

    之前所有的数据实例添加克隆操作期间被摧毁。然而所有MySQL设置不存储在表维护。

  • 增量恢复,依靠MySQL复制应用新实例上的所有缺失的事务。如果交易失踪在新实例的数量很小,这是最快的方法。。然而,这种方法只适用如果至少一个在线实例InnoDB ReplicaSet完成二进制日志,包含整个事务的历史InnoDB ReplicaSet。不能使用这种方法如果二进制日志已经清除所有成员或如果启用二进制日志只有在数据库中已经存在的实例。如果有一个非常大的交易申请,之前可能有很长的延迟实例可以加入InnoDB ReplicaSet。

加入一个ReplicaSet实例时,恢复中使用一样,InnoDB集群。MySQL壳试图自动选择一个合适的恢复方法。如果它是不可能选择一个安全的方法,使用MySQL的Shell提示。有关更多信息,请参见6.2.2.2部分,“与集群InnoDB使用MySQL克隆”。本节讨论ReplicaSet添加实例时的差异。

添加ReplicaSet实例

使用ReplicaSet.addInstance (实例)二级实例添加到操作ReplicaSet。您指定的实例作为一个类uri连接字符串。您所指定的用户必须具有相同所需的特权,必须在所有实例ReplicaSet,明白了配置InnoDB ReplicaSet实例

例如,添加实例rs-2与用户rsadmin问题:

mysql-js > rs.addInstance (rsadmin@rs-2)实例添加到replicaset……*执行验证检查这个实例报告自己的地址作为rsadmin@rs-2 rsadmin@rs-2:实例配置是合适的。*检查异步复制拓扑……*检查事务实例的状态……注意:没有预定义的目标实例“rsadmin@rs-2”(GTID集是空的)。外壳无法决定是否复制可以完全恢复状态。提供最安全、最方便的方式是通过一个新实例自动克隆配置,这将完全覆盖“rsadmin@rs-2”与物理状态的快照从现有replicaset成员。使用该方法默认情况下,将“recoveryMethod”选项设置为“克隆”。警告:它应该是安全的依靠复制增量恢复新实例的状态如果你确定所有更新执行在replicaset完成GTIDs启用,没有清除事务和新实例包含相同的GTID集replicaset或它的一个子集。使用该方法默认情况下,将“recoveryMethod”选项设置为“增量”。 Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone):

在这种情况下我们没有指定恢复方法,所以建议你如何最好地进行操作。在这个例子中,我们选择了克隆选择,因为我们没有任何现有交易实例加入ReplicaSet。因此没有删除数据的风险加入实例。

请选择恢复方法[C]孤独/[我]ncremental恢复/一个圆粒金刚石(默认克隆):C *更新拓扑等待克隆新成员完成的过程。按C ^中止操作。*等待克隆完成……注意:rsadmin@rs-2被克隆从rsadmin@rs-1 * *数据下降阶段:完成* *克隆转移文件复制# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 100%完成页面复制# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 100%完成重做复制# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 100%完成* *复苏阶段:\注:rsadmin@rs-2关闭……*等待服务器重启……准备好* rsadmin@rs-2重启,等待克隆完成……*克隆过程完成:59.63 MB转移在大约1秒(~ 1.00 B / s) * *配置从rsadmin@rs-1 rsadmin@rs-2复制* *等待新实例同步与主…实例“rsadmin@rs-2”添加到从rsadmin@rs-1 replicaset和复制。

假设实例有效InnoDB ReplicaSet使用,恢复所得。在这种情况下,新加入的实例使用MySQL克隆复制所有的交易尚未从主应用,然后加入ReplicaSet在线实例。要验证,可以使用ReplicaSet.status ()操作:

mysql-js > rs.status () {“replicaSet”:{“名称”:“例子”,“主要”:“rs-1:3306”,“状态”:“可用”、“statusText”:“所有可用的实例。”,“拓扑”:{“rs-1:3306”:{“地址”:“rs-1:3306”、“instanceRole”:“主”,“模式”:“R / W”,“状态”:“在线”},“rs-2:3306”:{“地址”:“rs-2:3306”、“instanceRole”:“二次”,“模式”:“R / O”,“复制”:{“applierStatus”:“APPLIED_ALL”、“applierThreadState”:“副本已经阅读所有中继日志;等待更多更新”、“receiverStatus”:“在”、“receiverThreadState”:“等待源发送事件”、“replicationLag”:零},“状态”:“在线”}},“类型”:“异步”}}

该输出显示ReplicaSet命名例子现在由两个MySQL实例,主要是1,76,645。目前有一个辅助实例rs-2,这是一个主要的复制品。ReplicaSet在线,这意味着中小学同步。在这一点上,ReplicaSet准备处理事务。

如果你想覆盖MySQL交互式Shell模式试图选择最合适的恢复方法,使用recoveryMethod选择配置实例恢复所需的数据如何能够加入ReplicaSet。有关更多信息,请参见6.2.2.2部分,“与集群InnoDB使用MySQL克隆”