今天我就来和大家聊聊MYSQL是如何用MYSQL Shell安装INNODB Cluster的,可能很多人都不太懂。为了让大家更好的了解,边肖为大家总结了以下内容,希望大家能从这篇文章中有所收获。
MYSQL 8发布已经有一段时间了,关于MGR的官方解决方案也已经有一段时间了,现在用优雅的名字innodb cluster来称呼MGR。虽然解决方案不止这些,但官方解决方案需要熟悉。(注意:您必须使用官方社区版本。如果您仍然在最新版本的percona 8.019上使用mysqlsh,您将报告用户权限错误。但是,这个错误发生在官方版本8.014中,所以使用官方解决方案需要与官方社区版本合作。另外,用percona版本的MYSQL 8.019以传统方式安装也会出现问题,唉。).
基本上花了半天的时间研究mysql shell的安装,看了很多其他的文章,但其实基本上还是遵循了上面的,以及成功的概率。
以下是踩坑记录。
以下安装环境基于官方社区的最新版本8.019。
【实验环境。
192.168.198.100
192.168.198.101
192.168.198.102
】
当然,官方架构图如下。
作为计划的一部分,除了上次提到的主要功能,mysql shell还有一个上次没有提到的功能,那就是集群的管理和安装。
在使用mysql shell之前,你还应该给你的账号(这里我们用的是admin)并赋予相关的权限,否则你无法工作。如果不给予相关权限,mysql shell在使用时也会报错。(这仅在安装集群时。)
以下是相关权限。
CREATE USER admin @“%”由“admin”标识;
授予备份管理、克隆管理、创建用户、执行、文件、持久保存、系统变量管理、进程、重新加载、复制客户端、复制从机、选择、关机、超级、系统变量管理开*。*带授权选项的“管理员”@“% ”;
在mysql上授予删除、插入、更新权限。*带授权选项的“管理员”@“% ”;
GRANT ALTER,ALTER ROUTINE,CREATE,CREATE ROUTINE,CREATE TEMPORARY TABLES,CREATE VIEW,DELETE,DROP,EVENT,EXECUTE,INDEX,INSERT,LOCK TABLES,REFERENCES,SHOW VIEW,TRIGGER,UPDATE ON MySQL _ innodb _ cluster _ metadata。*带授权选项的“管理员”@“% ”;
GRANT ALTER,ALTER ROUTINE,CREATE,CREATE ROUTINE,CREATE TEMPORARY TABLES,CREATE VIEW,DELETE,DROP,EVENT,EXECUTE,INDEX,INSERT,LOCK TABLES,REFERENCES,SHOW VIEW,TRIGGER,UPDATE ON MySQL _ innodb _ cluster _ metadata _ bkp。*带授权选项的“管理员”@“% ”;
GRANT ALTER,ALTER ROUTINE,CREATE,CREATE ROUTINE,CREATE TEMPORARY TABLES,CREATE VIEW,DELETE,DROP,EVENT,EXECUTE,INDEX,INSERT,LOCK TABLES,REFERENCES,SHOW VIEW,TRIGGER,UPDATE ON MySQL _ innodb _ cluster _ metadata _ previous。*带授权选项的“管理员”@“% ”;
以上账号也是我们运营mysql innodb集群的账号。
直接下载mysqlshell的rpm安装包,直接输入mysqlsh。每个MYSQL。
要安装,以后如果采用这一方案 mysql shell 将是你必要的工具
就进入到了mysql shell ,其中mysql shell中有很多关于DBA 的命令集合,可以看出,这些命令基本都是围绕我们的 innodb cluster
checkInstanceConfiguration()
createReplicaSet()
getReplicaSet()
stopSandboxInstance()
configureInstance()
deleteSandboxInstance()
help()
upgradeMetadata()
configureLocalInstance()
deploySandboxInstance()
killSandboxInstance()
configureReplicaSetInstance()
dropMetadataSchema()
rebootClusterFromCompleteOutage()
createCluster()
getCluster()
startSandboxInstance()
1 我们先对我们的单机的 mysql 进行检查,看看我们的配置哪里还有问题(针对innodb cluster)
dba.checkInstanceConfiguration('admin@192.168.198.100:3306')
我们可以很明显的看出来,我当前如果要使用 innodb cluster 中在配置有一个错误,我的 binlog_checksum 当前的设置是有问题的。我需要将其改为none
三台机器,在均ok的情况下,可以进行下一步的配置 (当然这里很可能有不会OK ,可能的问题 ,GTID 开没有开, 你设置那个帐号是要进行innodb cluster 集群操作的帐号,权限是否有,你的 enforce_gtid_consistency 开没有看,如果这些都不知道,建议先百度一下)
这里假设,你一切都是OK 的
我们直接通过刚才 admin 帐号来进行操作,进入mysqlsh
通过 \connect 命令来连接进来你的第一个 mysql innodb cluster ,这里我连接了100
dba.createCluster('cluster') 通过这个命令我们开始建立我们的 innodb cluster
var cluster = dba.getCluster()
cluster.status()
目前到这里是一切OK ,坑就就在下面了,而且看了一轮文章,包括中文的,英文的,一概不谈。
按照文档,下面我们直接使用cluster.addInstance('admin@mgr2:3306'),将第二个节点加入到集群中。
报错了,原因也找到了,是我其中一台机器和其他的机器(primary 和standby 的小版本不同导致,虽然都是8.019,但percona 和 社区版是无法之间是无法使用 clone的功能的)。
OK 我们将所有的节点都更换成,官方的社区版,再次添加节点,依然报错
卡在哪里,卡在clone 里,这也是最浪费时间的排错的问题,因为无论在官方的文档,还是第三方的中文,英文的文档都没有谈这个问题,所以耗费了一点时间。
实际上我们只要在standby节点做以下两个工作即可(按正常的逻辑说,系统是应该在操作clone之前判断的,但实际上,根本没有,导致操作的过程系统是克隆了,但对方的机器根本不接受这个clone的文件)
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
SET GLOBAL clone_valid_donor_list = 'mgr1:3306';
关键就是差者两句,应该是所有的节点都要安装插件,然后需要在standby节点设置,允许standby节点能接受来自mgr1节点的数据,否则无法添加节点,进入到集群中。做完这两句在mgr 2 mgr 3 后,整体的工作就很顺利了。
所以到此为止,我的集群通过mysql shell 的方式来安装是成功的。
整体的感官就是MYSQL 的集群安装通过mysql shell的方式来安装,很方便,但你要有一些基本的知识
1 JS 的简单语法
2 CLONE 的基本知识
否则你的安装很难顺利。
当然上面的安装整体的过程,以及后续的故障转移过程,上面的方式还会有漏洞。
1 需要设置整体集群的clone 的参数设置,这样在故障转移时就会游刃有余
2 每个节点要添加除自己以外的所有节点的 clone_valid_donor_list 否则故障转移成功后,故障节点重新加入不会那么顺利。
另外根据以上操作,以后通过mysqlshell + 程序的方式来对 INNODB CLUSTER 进行管理,将比以前管理MYSQL 的集群要方便,并且可以进行更多的高度自动化。
看完上述内容,你们对MYSQL如何利用MYSQL Shell安装 INNODB Cluster有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/46793.html