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、实例已经是集群的一部分

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();

结论

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

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-05-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java相关

nginx启动和配置

1175
来自专栏应兆康的专栏

每天一个Linux命令(4)——mkdir

mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建dirname指定的目录,如果给出了一个...

2798
来自专栏LanceToBigData

linux(七)之linux系统中查找文件

前面介绍一篇文章介绍了关于vi编辑器的使用,感觉是不是那么多的命令怎么记得住呀,小编也是这样让认为的,但是慢慢的发现,其实还是很有意思的。正所谓熟能生巧多练习,...

26610
来自专栏惨绿少年

Linux系统优化

1.1 查看Linux版本 1.1.1 系统版本 [root@znix ~]# cat /etc/redhat-release CentOS release 6...

2740
来自专栏程序员互动联盟

【专业技术】android 应用程序如何获取root权限

问题: 我遇到的问题是,在setting中我要操作/dev/mem设备,在一个寄存器中写值。对/dev/mem的操作毫无疑问是需要root权限的。开始我的做法是...

42710
来自专栏散尽浮华

linux运维中的命令梳理(一)

在linux日常运维中,我们平时会用到很多常规的操作命令。 --------------------------------------------------...

33110
来自专栏我的博客

简单的表单验证

<head> <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ /> ...

3135
来自专栏信安之路

巡风源码浅析之 Vulscan 分析篇

巡风是一款适用于企业内网的漏洞快速应急、巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表。

1170
来自专栏从零开始学自动化测试

Selenium2+python自动化3-解决pip使用异常

一、pip出现异常 有一小部分童鞋在打开cmd输入pip后出现下面情况:Did not provide a command ? Did not provide...

34810
来自专栏Java编程技术

java中守护线程与用户线程

Java线程分为两类分别为daemon线程(守护线程)和User线程(用户线程),在JVM启动时候会调用main函数,main函数所在的线程是一个用户线程,这个...

731

扫码关注云+社区