扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
今天就跟大家聊聊有关MySQL如何利用MYSQL Shell安装 INNODB Cluster,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
成都创新互联是一家集网站建设,澄海企业网站建设,澄海品牌网站建设,网站定制,澄海网站建设报价,网络营销,网络优化,澄海网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
MYSQL 8 发布有一段时间了,关于MGR 哦不现在叫MGR,雅致的名字 innodb cluster 的官方解决方案也是有一段时间了。虽然解决方案不止这个,但官方的方案还是要熟悉了解的。(注意:一定要用官方的社区版,如果使用percona最新的8.019版本依然在使用 mysqlsh 会报用户权限的错误,但这个错误是在官方版本8.014发生的问题,所以使用官方的解决方案,需要配合官方的社区版,另外使用 MYSQL 8.019的percona版本用传统方式安装也会有问题,唉)
基本上用了半天的时间,研究了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@'%' identified by 'admin';
GRANT BACKUP_ADMIN, CLONE_ADMIN, CREATE USER, EXECUTE, FILE, PERSIST_RO_VARIABLES_ADMIN, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SELECT, SHUTDOWN, SUPER, SYSTEM_VARIABLES_ADMIN ON *.* TO 'admin'@'%' WITH GRANT OPTION;
GRANT DELETE, INSERT, UPDATE ON mysql.* TO 'admin'@'%' WITH GRANT OPTION;
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.* TO 'admin'@'%' WITH GRANT OPTION;
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.* TO 'admin'@'%' WITH GRANT OPTION;
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.* TO 'admin'@'%' WITH GRANT OPTION;
以上的帐号也是我们在操作mysql innodb cluster 的帐号
直接下载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有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流