MySQL Innodb Cluster配置
目录
配置规划
三台主机分别创建'mingliang'@'%' 用户并授权
安装mysql shell(三台机器必须全部安装)
在mysql8用户中配置环境变量
使用mysql shell登录测试
安装mysql router(三台主机必须全部安装)
在MySQL8用户中配置环境变量
通过MySQLShell搭建MGR,下面步骤每个节点都执行
创建集群实例(在master执行即可)
配置MySQLRouter路由
测试配置
连接测试
数据同步测试
故障测试
配置规划
本篇文章中MySQL使用编译安装
ip地址 | 主机名 | 角色 | 安装软件 |
192.168.3.2 | 348aeb8077a8 | 主(初始化) | Mysql8.0.30 mysql-shell mysql-route |
192.168.3.2 | 7ff037fcf001 | 备(初始化) | Mysql8.0.30 mysql-shell mysql-route |
192.168.3.4 | fc7b8078d23b | 备(初始化) | Mysql8.0.30 mysql-shell mysql-route |
三台实例分别创建'mingliang'@'%' 用户并授权
create user 'mingliang'@'%' identified with mysql_native_password by '123456';
grant all on *.* to 'mingliang'@'%' with grant option;
安装mysql shell(三台机器必须全部安装)
wget https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.30-linux-glibc2.12-x86-64bit.tar.gz
tar -xzvf mysql-shell-8.0.30-linux-glibc2.12-x86-64bit.tar.gz
mv mysql-shell-8.0.30-linux-glibc2.12-x86-64bit /usr/local/mysqlsh
chown mysql8:mysql8 -R /usr/local/mysqlsh
在mysql8用户中配置环境变量
su - mysql8
vim .bash_profile /添加下述内容export PATH=$MYSQL_HOME/bin:/usr/local/mysqlsh/bin:$PATH#使文件生效
source .bash_profile
使用mysql shell登录测试
mysqlsh --mysqlx -h 192.168.3.2 -P 33060 -umingliang -p
这里登录测试的时候出现了一个这样的错误
MySQL Error 2027: Requested session assumes MySQL X Protocol but '192.168.3.2:3306' seems to speak the classic MySQL protocol (Unexpected response received from server, msg-id:10)
这个是因为上面连接的时候X协议的端口没有指定正确,可以使用mysql -u root -p -e "select @@mysqlx_port"查看X协议端口,然后连接的时候指定正确的端口就可以成功登录了
参考文档:mysql - 如何为 mysql 8 docker 容器启用 x 协议_Stack Overflow中文网
安装mysql router(三台主机必须全部安装)
wget https://downloads.mysql.com/archives/get/p/41/file/mysql-router-8.0.30-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-router-8.0.30-linux-glibc2.12-x86_64.tar.xz#没有xz的话需要安装下
yum install -y xzmv mysql-router-8.0.30-linux-glibc2.12-x86_64 /usr/local/mysqlrouter
chown mysql8:mysql8 /usr/local/mysqlrouter
在MySQL8用户中配置环境变量
su - mysql8
vim .bash_profile /添加下述内容export PATH=$MYSQL_HOME/bin:/usr/local/mysqlsh/bin:/usr/local/mysqlrouter/bin:$PATH#使文件生效
source .bash_profile
通过MySQLShell搭建MGR,下面步骤每个节点都执行
#192.168.3.2 root@348aeb8077a8 master
su - mysql8
mysqlsh --mysqlx -h 192.168.3.2 -P33060 -umingliang -pdba.configureInstance();dba.configureInstance();#192.168.3.3 root@7ff037fcf001 slave1
su - mysql8
mysqlsh --mysqlx -h 192.168.3.3 -P33060 -umingliang -pdba.configureInstance();dba.configureInstance();#192.168.3.4 root@fc7b8078d23b slave2
su - mysql8
mysqlsh --mysqlx -h 192.168.3.4 -P33060 -umingliang -pdba.configureInstance();dba.configureInstance();
创建集群实例(在master执行即可)
#默认为单主模式,第一个加入为写节点
#---第一个节点创建集群实例(192.168.3.2)var cluster = dba.createCluster('DemoCluster')#添加其他节点192.168.3.3和192.168.3.4,此时会进行数据库克隆,
#把节点1的数据库复制到其它数据库,同时进行同步。var cluster=dba.getCluster()cluster.addInstance('mingliang@192.168.3.3:3306')cluster.addInstance('mingliang@192.168.3.4:3306')#查看集群状态var cluster=dba.getCluster()cluster.status();
这里由于3个节点的UUID相同,导致添加集群节点的没有添加进去
Cluster.addInstance: Cannot add an instance with the same server UUID (1d6dd7c2-5ff7-11f0-bb22-0242c0a80302) of an active member of the cluster '348aeb8077a8:3306'. Please change the UUID of the instance to add, all members must have a unique server UUID. (RuntimeError)
更新uuid后,master节点执行了克隆恢复,但是发现一直处于* Waiting for server restart... 状态,直至超时,去slave查看error.log发现发生了crash,导致启动失败
最后重新配置了一次,在添加节点恢复的时候选择了增量恢复后,成功添加
#添加slave1
#添加slave2
配置MySQLRouter路由
#创建路由数据目录
su - mysql8
mkdir myroyter#路由初始化
#master
mysqlrouter --bootstrap mingliang@172.0.0.1:3306 --directory /home/mysql8/myrouter --conf-use-sockets --user mysql8#启动路由
./myrouter/star.sh
测试配置
连接测试
mysql -u mingliang -p -P6446
数据同步测试
create database demo1;