前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle公共云中的MySQL InnoDB集群(2)

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

作者头像
数据和云
发布2018-03-07 15:51:16
1K0
发布2018-03-07 15:51:16
举报
文章被收录于专栏:数据和云数据和云

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

验证实例

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

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

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

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

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

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

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

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

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

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

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

手动重新添加实例

如果一个实例未配置为自动重新加入副本集/集群 - 可以通过在给定实例上执行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');

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

mysql-js> cluster.status();

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

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

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

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

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

mysql-js> cluster.status();

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

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

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

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

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

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

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

mysql-js> cluster.status();

在所有成员offline时恢复集群

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

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

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

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

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

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

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

mysql-js> cluster.status();

结论

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档