本文档基于《debian10 安装mysql8.0.27》
按上述流程配完三台一样的机子,且每台机子的/etc/hosts都配置好对应的域名解析。
centos7 的话需要关闭防火墙和 setenforce

  1. #关闭setenforce并修改配置文件 SELINUX=disabled
  2. setenforce 0
  3. vim /etc/selinux/config
  4. #关闭防火墙
  5. systemctl stop firewalld.service
  6. systemctl disabled firewalld.service

1.安装mysql shell

  1. apt-get install mysql-shell -y

2.检测mysql实例是否符合条件

  1. #连接实例默认用root账号 指定账号格式为zjy@mysql1:3306
  2. \connect mysql1:3306
  3. #检测本地实例
  4. dba.checkInstanceConfiguration()
  5. #检测远程实例
  6. #dba.checkInstanceConfiguration("root@mysql1:3306")

出现错误,此处意为账号缺少一些创建集群需要的权限按提示输入命令赋予账号权限即可。
image.png

  1. #按照提示在mysql shell中执行sql语句赋予相关权限
  2. \sql GRANT CLONE_ADMIN, CONNECTION_ADMIN, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'root'@'%' WITH GRANT OPTION;
  1. #修复本地不合规配置
  2. dba.checkInstanceConfiguration()
  3. #修复远程不合规配置
  4. #dba.checkInstanceConfiguration("root@mysql1:3306")

会看到如图信息列出所有不符合集群要求的问题,可以自行修改,如果只是配置问题也可以执行命令自动修复
image.png

3.修改不符合集群要求的配置

按照提示重启mysql即可

  1. #修改本地实例设置
  2. dba.configureLocalInstance()

image.png

  1. dba.checkInstanceConfiguration()

image.png

4.创建集群

先连接到任意节点创建集群,此节点会被作为主节点。

  1. var cluster = dba.createCluster('cluster')
  2. #创建的变量会话结束后就销毁了 以后操作集群可以用下列命令获取对象
  3. var cluster = dba.getCluster()

此时提示我们至少需要三台机子才能组成集并且只能容忍一台挂掉,并非报错。
image.png
添加本实例到集群中

  1. cluster.addInstance("mysql2:3306")

此处mysql shell要求选择同步模式,正常情况新加入节点的崭新mysql选默认即可。
image.png
正常情况新机子不会遇到任何问题就直接加入了。

我在这里遇到两次过加入失败的问题仅供参考,一次是因为用centos7 没有关闭防火墙和selinux。
debian10用虚拟机的时候也遇到坑,mysql2和mysql3因为是复制过来的,/etc/hosts里有127.0.1.1 mysql1的配置忘记去,导致一直无法加入集群
image.png
5