前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL 利用 MYSQL Shell 安装 INNODB Cluster 这坑踩得

MYSQL 利用 MYSQL Shell 安装 INNODB Cluster 这坑踩得

作者头像
AustinDatabases
发布2020-04-10 10:30:35
1.1K0
发布2020-04-10 10:30:35
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

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 的集群要方便,并且可以进行更多的高度自动化。

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

本文分享自 AustinDatabases 微信公众号,前往查看

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

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

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