Oracle公共云中的MySQL InnoDB集群(2)

栏目: 数据库 · Mysql · 发布时间: 7年前

内容简介:Oracle公共云中的MySQL InnoDB集群(2)

在本系列的第一部分 Oracle公共云中的MySQL InnoDB集群 我们学习了如何使用Oracle Cloud配置InnoDB集群。 本文我们将了解如何以及何时使用MySQL Shell中提供的一些高级功能。

验证实例

首先需要验证一个特定的MySQL Server实例是否做好准备成为InnoDB集群的一部分。使用dba.checkInstanceConfiguration()函数:

mysql-js> dba.checkInstanceConfiguration('root@ic01-mysql-1:3306');

将看到以下三个最终状态结果之一。

1、实例已经是集群的一部分

Oracle公共云中的MySQL InnoDB集群(2)

2.实例还没有准备好进行InnoDB集群的使用

将看到显示未满足要求的列表:

mysql-js> dba.checkInstanceConfiguration('root@localhost:3306');

Oracle公共云中的MySQL InnoDB集群(2)

3、该实例已准备好被InnoDB集群使用

以下实例满足作为InnoDB集群一部分的所有要求:

mysql-js> dba.checkInstanceConfiguration('root@localhost:3306');

Oracle公共云中的MySQL InnoDB集群(2)

注意: 在以上验证中,远程主机和本地主机都使用相同的函数进行验证。

手动重新添加实例

如果一个实例未配置为自动重新加入副本集/集群 - 可以通过在给定实例上执行dba.configureLocalInstance()来实现),那么每当实例出于任何原因离开副本集/集群时,将需要手动重新加入。

要手动将实例重新加入集群,可以连接到作为InnoDB集群的配置部分的一个特定主机,或者最好连接到为集群配置的 MySQL 路由器实例,这样能确保连接到目前在线的R / W成员 - 如下所示:

mysqlsh

shell.connect('root@localhost:6446');

然后,运行以下命令手动重新加入该实例:

mysql-js> var cluster = dba.getcluster('mycluster');

mysql-js> cluster.rejoinInstance('root@ic01-mysql-1:3306');

Oracle公共云中的MySQL InnoDB集群(2)

一旦将实例添加回集群,验证是否再次在线:

mysql-js> cluster.status();

Oracle公共云中的MySQL InnoDB集群(2)

在仲裁实例缺失时恢复集群

当复制环境中的大多数实例变为UNREACHABLE时,集群将不再具有执行任何成员身份更改或执行R / W用户事务的仲裁实例。 在这段时间内,只能执行只读查询,以保持系统的一致性和数据的安全。

在以下屏幕截图中,可以看到一个丢失其仲裁的集群:

Oracle公共云中的MySQL InnoDB集群(2)


由于缺少仲裁,执行以下功能添加实例会导致错误:

为了处理这种情况,可以使用cluster.forceQuorumUsingPartitionOf()API调用,但使用之前,要确保所有UNREACHABLE实例都真正脱机, 避免出现脑裂。将有两个组分别接收更新。

mysql-js> cluster.forceQuorumUsingPartitionOf('root@localhost:3310');

Oracle公共云中的MySQL InnoDB集群(2)

强制仲裁功能完成后,可以查看集群的状态:

mysql-js> cluster.status();

Oracle公共云中的MySQL InnoDB集群(2)

可以看到,实例将其状态从UNREACHABLE更改为MISSING,现在集群可以执行写入操作。 现在可以添加一个新的实例,例如:

mysql-js> cluster.addInstance('root@localhost:3313');

Oracle公共云中的MySQL InnoDB集群(2)

再次检查集群状态,会注意到新实例已添加到集群:

Oracle公共云中的MySQL InnoDB集群(2)

一旦知道(丢失的)实例重新online,可以在实例没有持久配置以自动重新加入群集的情况下手动将其重新加入群集:

mysql-js> cluster.rejoinInstance('root@localhost:3311');

mysql-js> cluster.rejoinInstance('root@localhost:3312');

Oracle公共云中的MySQL InnoDB集群(2)

现在,集群中的所有实例都是ONLINE:

mysql-js> cluster.status();

Oracle公共云中的MySQL InnoDB集群(2)

在所有成员offline时恢复集群

当群集的所有成员因为某些原因离开时,只有一种方式可以恢复群集: 再次启动它并重新加入其余的节点。 为群集选择初始引导/种子实例,并根据群集元数据中记录的先前状态对其进行恢复。

要完成此操作,需要打开与组的最后一个RW / PRIMARY成员的连接(因为该实例应该保证在该组内具有GTID超集),并执行命令 dba.rebootClusterFromCompleteOutage()。

如果尝试通过连接到引导实例并执行dba.getCluster()命令来尝试获取集群状态,则会收到一条错误,指出该功能不适用于独立实例:

mysql-js> shell.connect('root@localhost:3310');

mysql-js> cluster = dba.getCluster();

Oracle公共云中的MySQL InnoDB集群(2)

所以现在当你使用API调用来重新启动集群。 系统将提示使用交互式邮件自动重新加入作为群集一部分的实例。 回答“y”自动添加:

mysql-js> var cluster = dba.rebootClusterFromCompleteOutage();

Oracle公共云中的MySQL InnoDB集群(2)

组恢复后,验证集群的状态:

mysql-js> cluster.status();

Oracle公共云中的MySQL InnoDB集群(2)

结论

现在已经获得了从单个实例或完整群集中断的情况下恢复所需的知识。 可以看到,这些功能易于使用,直观,旨在涵盖在高可用性环境中可能导致问题的主要场景。

如果您对本文所述的基本设置有任何疑问,请在评论中通知我们。谢谢你使用MySQL!

加入"云和恩墨大讲堂"微信群,参与讨论学习

搜索 盖国强(Eygle)微信号:eyygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。

Oracle公共云中的MySQL InnoDB集群(2)

关注公众号,获得后续精彩分享

Oracle公共云中的MySQL InnoDB集群(2)

近期文章


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络心理学

网络心理学

玛丽•艾肯 (Mary Aiken) / 中信出版社 / 2018-8-1 / CNY 58.00

《五十度灰》如何利用恋物心理,成为全球仅次于《圣经》的畅销读物? 为什么相对于亲朋好友,你更愿意向网络陌生人敞开心扉? 上网时总感觉时间飞逝,原来是网络的时间扭曲效应? 网络游戏中埋伏了哪些“上瘾”机关,暗中操控着你的行为? 为什么科技越发达,我们就越怕死? ...... 网络空间是一个巨大的兔子洞,里面集合了新奇、刺激、喜悦、痛苦、不安等各种元素。在日复一日的......一起来看看 《网络心理学》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码