mysql 8.0 安装手册和Mysql Group Replication(MGR) 组复制的安装
转载自博客:
第一步要先安装mysql ,可以参考文档
先设置主机hosts
三台服务器设置hosts
特别要注意一个关键点: 必须保证各个mysql节点的主机名不一致,并且能通过主机名找到各成员!
则必须要在每个节点的/etc/hosts里面做主机名绑定,否则后续将节点加入group组会失败!报错RECOVERING!
vim /etc/hosts 192.168.175.155 mgr1 192.168.175.156 mgr2 192.168.175.157 mgr3
4、关闭selinux
临时关闭:输入命令setenforce 0,重启系统后还会开启。
永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=24901/tcp --permanent
firewall-cmd --reload
5、安装MYsql 8.0 采用rpm的形式安装
https://blog.csdn.net/qq_41307110/article/details/124407290
进入官网https://downloads.mysql.com/archives/community/
下载 centos8 的
mysql-8.0.28-1.el8.x86_64.rpm-bundle.tar
https://blog.csdn.net/lqzixi/article/details/123260293
https://blog.csdn.net/lqzixi/article/details/123260293
tar -xf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
在安装之前要先检查是否按照错误或者存在版本问题
检测是否安装MySQL和 mariadb
rpm -qa|grep mysql rpm -qa|grep mariadb mariadb-libs-5.5.68-1.el7.x86_64 [root@localhost opt]#
5,删除 mariadb-libs-5.5.68-1.el7.x86_64
[root@localhost opt]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
[root@localhost opt]# rpm -qa|grep mariadb
[root@localhost opt]#
卸载mysql需要下面的操作
[root@mgr1 mysql]# rpm -qa | grep -i mysql
perl-DBD-MySQL-4.023-6.el7.x86_64
mysql-community-client-8.0.28-1.el7.x86_64
mysql-community-libs-8.0.28-1.el7.x86_64
mysql-community-libs-compat-8.0.28-1.el7.x86_64
mysql-community-common-8.0.28-1.el7.x86_64
mysql-community-devel-8.0.28-1.el7.x86_64
mysql-community-client-plugins-8.0.28-1.el7.x86_64
mysql-community-icu-data-files-8.0.28-1.el7.x86_64
mysql-community-server-8.0.28-1.el7.x86_64
同事要删除默认生产的文件
删除 Mysql 的数据存放目录
[root@mgr1 mysql]# rm -rf /var/lib/mysql/ [root@mgr1 mysql]# rm -rf /var/run/mysqld [root@mgr1 mysql]# rm -rf /var/log/mysqld.log [root@mgr1 mysql]# rm -rf /etc/my.cnf [root@mgr1 mysql]# rm -rf /etc/my.cnf.d
其中
安装了 mysql-community-server 组件,会:
a). 在 /etc/下生成 my.cnf 文件 和 my.cnf.d 文件夹
b). 在/var/lib/下生产以下三个文件夹
c). 在/var/log/ 下生成 mysqld.log 文件
d). 在/var/run/ 下生成 mysqld 目录
————————————————
上面这些目录都要删除
6,安装MySQL,注意依赖包
整体安装步骤代码
[root@localhost opt]# cd mysql [root@localhost mysql]# ls mysql-community-client-8.0.28-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm mysql-community-common-8.0.28-1.el7.x86_64.rpm mysql-community-devel-8.0.28-1.el7.x86_64.rpm mysql-community-embedded-compat-8.0.28-1.el7.x86_64.rpm mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm mysql-community-libs-8.0.28-1.el7.x86_64.rpm mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm mysql-community-server-8.0.28-1.el7.x86_64.rpm mysql-community-test-8.0.28-1.el7.x86_64.rpm [root@localhost mysql]# rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm [root@localhost mysql]# rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm [root@localhost mysql]# rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm [root@localhost mysql]# rpm -ivh mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm [root@localhost mysql]# yum install openssl-devel [root@localhost mysql]# rpm -ivh mysql-community-devel-8.0.28-1.el7.x86_64.rpm [root@localhost mysql]# yum -y install perl [root@localhost mysql]# yum -y install net-tools
[root@localhost mysql]# rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm
[root@localhost mysql]#rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
[root@localhost mysql]# rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
[root@localhost mysql]# rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm
[root@localhost mysql]#
在安装的过程中报错
[root@mgr3 mysql]# rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm --force --nodeps
接下来就是启动mysql,
首先要看mysql是否安装完整
[root@localhost mysql]# rpm -qa | grep mysql
转载自博客https://blog.csdn.net/lqzixi/article/details/123260293
安装完成
安装完成后,会自动生成 /etc/my.cnf 配置文件
安装了 mysql-community-server 组件,会:
a). 在 /etc/下生成 my.cnf 文件 和 my.cnf.d 文件夹
b). 在/var/lib/下生产以下三个文件夹,里面存储文件:/var/lib/mysql/
c). 在/var/log/ 下生成 mysqld.log 文件
d). 在/var/run/ 下生成 mysqld 目录
Mysql启动命令如下所示:
1.5 服务相关命令
重启 MySQL 服务
systemctl start mysqld.service
检查 MySQL 服务运行状态
systemctl status mysqld.service
停止 MySQL 服务
systemctl stop mysqld.service
重启 MySQL 服务
systemctl restart mysqld.service
出现下面的这样就是安装成功了
修改密码
- 查看密码
2.1 获取初始密码
grep 'temporary password' /var/log/mysqld.log
2.2 登录 MySQL
# -h 指定 IP 地址
mysql -u root -p
输入上述命令获取的密码。
默认生产的密码是:9#Yi5j=szJ4/
2.3 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'PASSWD';
2.4 其他:添加新用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
然后执行下面的命令:
mysql> flush privileges;
立即上上面的修改生效。
https://blog.csdn.net/m0_60111819/article/details/129790568
10,登入MySQL
[root@localhost mysql]# mysql -uroot -p
Enter password:
11,修改登入密码(若改成简单的密码,需修改默认规则)‘’
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mysql@1234';
12,查看当前默认规则‘’
mysql> show variables like 'validate_password%';
13,修改规则
mysql> set global validate_password.policy=LOW; mysql> set global validate_password.length=4;
14,立即生效
mysql> flush privileges;
15,修改简单的密码
mysql> alter user 'root'@'localhost' identified by '1234';
16,创建用户可以远程访问
mysql> create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
‘’
17,给用户分配权限,并立即生效
mysql> grant all on *.* to 'root'@'%';
mysql> flush privileges;
8,退出
mysql> exit;
19,关闭防火墙
[root@localhost mysql]# systemctl stop firewalld
20,远程连接
这样3个mysql实例就安装成功了,接下来就要按照mysql的mgr集群了
参考博客:https://blog.csdn.net/weixin_46594796/article/details/139321738
主节点mgr1执行:直接CV就行,不要墨迹!
# 修改 MySQL 配置 sudo cat >> /etc/my.cnf <<-'EOF' # 使用mysql_native_password密码策略,防止navicat连不上mysql8 default_authentication_plugin=mysql_native_password # 设置MySQL插件目录:MGR基于插件,必须设置插件路径 plugin_dir=/usr/lib64/mysql/plugin # 服务器编号,Master=1 server_id=1 # 开启binlog的GTID模式(MGR强制要求) gtid_mode=ON # 开启后MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行 enforce_gtid_consistency=ON # 关闭binlog校验(MGR强制要求二进制日志不支持Binlog Event Checksum ) binlog_checksum=NONE # 定义用于事务期间哈希写入提取的算法,组复制模式下必须设置为 XXHASH64。 transaction_write_set_extraction=XXHASH64 # 确定组复制恢复时是否应该应用 SSL,通常设置为“开”,但默认设置为“关”。 loose-group_replication_recovery_use_ssl=ON # 服务器实例所在复制组名称,必须是有效的 UUID,所有节点必须相同。 loose-group_replication_group_name="bbbbbbbb-bbbb-cccc-dddd-eeeeeeeeeeee" # 确定服务器是否应该在服务器启动期间启动组复制。 loose-group_replication_start_on_boot=OFF # 为复制组中其他的成员提供的网络地址,指定为“主机:端口”的格式化字符串。 # 很多人想当然认为端口应该是3306,起始不然,MGR需要开启新端口24901同步交换 # 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可 loose-group_replication_local_address="mgr1:24901" # 用于建立新成员到组的连接组成员列表。 # 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。 # 同样采用n0~n2的主机名替代 loose-group_replication_group_seeds="mgr1:24901,mgr2:24901,mgr3:24901" # 配置此服务器为引导组,这个选项必须仅在一台服务器上设置, # 并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。 loose-group_replication_bootstrap_group=OFF EOF
主节点没有配置mgr,默认生产的配置文件如下所示
主节点mgr1配置了mgr之后配置的节点如下所示
完整的配置如下
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pidi #mgr配置如下所示 # 使用mysql_native_password密码策略,防止navicat连不上mysql8 default_authentication_plugin=mysql_native_password # 设置MySQL插件目录:MGR基于插件,必须设置插件路径 plugin_dir=/usr/lib64/mysql/plugin # 服务器编号,Master=1 server_id=1 # 开启binlog的GTID模式(MGR强制要求) gtid_mode=ON # 开启后MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行 enforce_gtid_consistency=ON # 关闭binlog校验(MGR强制要求二进制日志不支持Binlog Event Checksum ) binlog_checksum=NONE # 定义用于事务期间哈希写入提取的算法,组复制模式下必须设置为 XXHASH64。 transaction_write_set_extraction=XXHASH64 # 确定组复制恢复时是否应该应用 SSL,通常设置为“开”,但默认设置为“关”。 loose-group_replication_recovery_use_ssl=ON # 服务器实例所在复制组名称,必须是有效的 UUID,所有节点必须相同。 loose-group_replication_group_name="bbbbbbbb-bbbb-cccc-dddd-eeeeeeeeeeee" # 确定服务器是否应该在服务器启动期间启动组复制。 loose-group_replication_start_on_boot=OFF # 为复制组中其他的成员提供的网络地址,指定为“主机:端口”的格式化字符串。 # 很多人想当然认为端口应该是3306,起始不然,MGR需要开启新端口24901同步交换 # 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可 loose-group_replication_local_address="mgr1:24901" # 用于建立新成员到组的连接组成员列表。 # 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。 # 同样采用n0~n2的主机名替代 loose-group_replication_group_seeds="mgr1:24901,mgr2:24901,mgr3:24901" # 配置此服务器为引导组,这个选项必须仅在一台服务器上设置, # 并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。 loose-group_replication_bootstrap_group=OFF
接下来mg2从节点配置
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid default_authentication_plugin=mysql_native_password plugin_dir=/usr/lib64/mysql/plugin # 设置唯一的服务器编号 server_id=2 gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE # 这个参数决定primary节点到secondary节点的请求是否为基于 RSA 密钥对的密码交换所需的公钥 loose-group_replication_recovery_get_public_key=ON loose-group_replication_recovery_use_ssl=ON loose-group_replication_group_name="bbbbbbbb-bbbb-cccc-dddd-eeeeeeeeeeee" loose-group_replication_start_on_boot=OFF # 设置本机地址n1:24901 loose-group_replication_local_address="mgr2:24901" loose-group_replication_group_seeds="mgr1:24901,mgr2:24901,mgr3:24901" loose-group_replication_bootstrap_group=OFF
接下来设置mgr3
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid default_authentication_plugin=mysql_native_password plugin_dir=/usr/lib64/mysql/plugin #设置唯一的服务器编号 server_id=3 gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE #这个参数决定primary节点到secondary节点的请求是否为基于 RSA 密钥对的密码交换所需的公钥 loose-group_replication_recovery_get_public_key=ON loose-group_replication_recovery_use_ssl=ON loose-group_replication_group_name="bbbbbbbb-bbbb-cccc-dddd-eeeeeeeeeeee" loose-group_replication_start_on_boot=OFF #设置本机地址n2:24901 loose-group_replication_local_address="mgr3:24901" loose-group_replication_group_seeds="mgr1:24901,mgr2:24901,mgr3:24901" loose-group_replication_bootstrap_group=OFF
三台服务器,依次启动 MySQL
三台服务器,依次启动 MySQL
# 3台服务器都执行
systemctl start mysqld
2.2.4、修改密码、设置主从同步
三台服务器,依次通过该命令,获取数据库连接密码:
# 获取数据库密码
grep 'temporary password' /var/log/mysqld.log
三台服务器,连接到数据库控制台中:
# 连接数据库
mysql -uroot -p'密码'
三台数据库控制台中,都执行下述命令(3台服务器都执行):
核心就是要在主节点上面要创建主从负责的账号和密码,用于三台机器的主从复制,
CREATE USER rpl_user@'%' IDENTIFIED BY 'asAS123456!'; # 赋予主从同步权限 GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; # 创建一个远程连接用户,这个用户用在Navcate、JDBC登录的时候,直接用root登录不好 create user 'remote'@'%' identified with mysql_native_password by 'asAS123456!'; # 为remote用户赋予所有数据库资源的访问权限,熟悉grant的小伙伴可以自己调整 grant all privileges on *.* to remote@'%'; # 让刚才的修改生效 FLUSH PRIVILEGES; # 删除已产生的Binlog # 一定要RESET MASTER,它会删除刚才已产生的Binlog # 因为刚才Binglog包含创建用户这种高权限操作,用于主从同步的rpl_user账户是没有权限执行的 # 这就会导致RelayLog重放无法正确执行,导致从属服务器卡死在"RECEVERING"状态 # 利用RESET MASTER删除这些无法执行的binlog,就没问题了,下面的这个命令一定要执行 RESET MASTER;
在主节点机器上面创建创建rpl_user账户,此账户用于实现主从数据同步
CREATE USER rpl_user@'%' IDENTIFIED BY 'asAS123456!';
# 赋予主从同步权限
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
# 创建一个远程连接用户,这个用户用在Navcate、JDBC登录的时候,直接用root登录不好
create user 'remote'@'%' identified with mysql_native_password by 'asAS123456!';
# 为remote用户赋予所有数据库资源的访问权限,熟悉grant的小伙伴可以自己调整
grant all privileges on *.* to remote@'%';
# 让刚才的修改生效
FLUSH PRIVILEGES;
# 删除已产生的Binlog
# 一定要RESET MASTER,它会删除刚才已产生的Binlog
# 因为刚才Binglog包含创建用户这种高权限操作,用于主从同步的rpl_user账户是没有权限执行的
# 这就会导致RelayLog重放无法正确执行,导致从属服务器卡死在"RECEVERING"状态
# 利用RESET MASTER删除这些无法执行的binlog,就没问题了,下面的这个命令一定要执行
RESET MASTER;
CREATE USER rpl_user@'%' IDENTIFIED BY 'asAS123456!'; # 赋予主从同步权限 GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; # 创建一个远程连接用户,这个用户用在Navcate、JDBC登录的时候,直接用root登录不好 create user 'remote'@'%' identified with mysql_native_password by 'asAS123456!'; # 为remote用户赋予所有数据库资源的访问权限,熟悉grant的小伙伴可以自己调整 grant all privileges on *.* to remote@'%'; # 让刚才的修改生效 FLUSH PRIVILEGES; # 删除已产生的Binlog # 一定要RESET MASTER,它会删除刚才已产生的Binlog # 因为刚才Binglog包含创建用户这种高权限操作,用于主从同步的rpl_user账户是没有权限执行的 # 这就会导致RelayLog重放无法正确执行,导致从属服务器卡死在"RECEVERING"状态 # 利用RESET MASTER删除这些无法执行的binlog,就没问题了,下面的这个命令一定要执行 RESET MASTER;
上面特别关键的时这个命令RESET MASTER;
功能说明:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。用于第一次进行搭建主从库时,进行主库binlog初始化工作;
# 删除已产生的Binlog
# 一定要RESET MASTER,它会删除刚才已产生的Binlog
# 因为刚才Binglog包含创建用户这种高权限操作,用于主从同步的rpl_user账户是没有权限执行的
# 这就会导致RelayLog重放无法正确执行,导致从属服务器卡死在"RECEVERING"状态
# 利用RESET MASTER删除这些无法执行的binlog,就没问题了,下面的这个命令一定要执行
2.2.5、安装 MGR 插件
在三台服务器的MySQL控制台中,安装MGR插件,执行命令:
# 3台服务器都执行 INSTALL PLUGIN group_replication SONAME 'group_replication.so';
# 注意:只在主服务器上运行 # 我们在 primary.cnf 配置文件中把 group_replication_bootstrap_group 参数设置成 OFF # 在 primary 服务器启动时并不会直接启动复制组,通过下面的命令动态的开启复制组是我们的集群更安全 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
在两个从服务器mgr2和mgr3上面MySQL控制台上,执行下述命令:
# 指定主从账户与指定通信频道 CHANGE MASTER TO MASTER_USER="rpl_user", MASTER_PASSWORD="asAS123456!" FOR CHANNEL 'group_replication_recovery'; # 开启组网数据同步 START GROUP_REPLICATION;
当两个从节点都运行完毕后,运行下面SQL结果进行验证:
SELECT * FROM performance_schema.replication_group_members;
在启动的时候如何报下面的错误
https://blog.csdn.net/oradbm/article/details/134712762
问题9 报错 [ERROR] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33081'
其他节点启动MGR时,执行命令start group_replication;
报错 [ERROR] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33081'
解决办法:配置白名单
loose-group_replication_ip_whitelist="10.xx.0.0/16,127.0.0.1/8"
2022-09-01T08::31.088437Z [Warning] Plugin group_replication reported: '[GCS] Connection attempt from IP address 192.168.9.208 refused. Address is not in the IP whitelist.'
解决方法:配置group_replication_ip_whitelist
接下来白名单的设置如下,要在三个节点上面都进行这样的设置
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pidi #mgr配置如下所示 # 使用mysql_native_password密码策略,防止navicat连不上mysql8 default_authentication_plugin=mysql_native_password # 设置MySQL插件目录:MGR基于插件,必须设置插件路径 plugin_dir=/usr/lib64/mysql/plugin # 服务器编号,Master=1 server_id=1 # 开启binlog的GTID模式(MGR强制要求) gtid_mode=ON # 开启后MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行 enforce_gtid_consistency=ON # 关闭binlog校验(MGR强制要求二进制日志不支持Binlog Event Checksum ) binlog_checksum=NONE # 定义用于事务期间哈希写入提取的算法,组复制模式下必须设置为 XXHASH64。 transaction_write_set_extraction=XXHASH64 # 确定组复制恢复时是否应该应用 SSL,通常设置为“开”,但默认设置为“关”。 loose-group_replication_recovery_use_ssl=ON # 服务器实例所在复制组名称,必须是有效的 UUID,所有节点必须相同。 loose-group_replication_group_name="bbbbbbbb-bbbb-cccc-dddd-eeeeeeeeeeee" # 确定服务器是否应该在服务器启动期间启动组复制。 loose-group_replication_start_on_boot=OFF # 为复制组中其他的成员提供的网络地址,指定为“主机:端口”的格式化字符串。 # 很多人想当然认为端口应该是3306,起始不然,MGR需要开启新端口24901同步交换 # 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可 loose-group_replication_local_address="192.168.175.155:24901" # 用于建立新成员到组的连接组成员列表。 # 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。 # 同样采用n0~n2的主机名替代 loose-group_replication_group_seeds="192.168.175.155:24901,192.168.175.156:24901,192.168.175.157:24901" group_replication_ip_whitelist = '192.168.175.155,192.168.175.156,192.168.175.157' # 配置此服务器为引导组,这个选项必须仅在一台服务器上设置, # 并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。 loose-group_replication_bootstrap_group=OFF
在mgr2个mg3上面也是同样的设置
但是设置之后,还是启动不起来,还是一样的错误,在官网上面给出了详细的解释
https://www.cnblogs.com/naocanzhishen/p/13540861.html
参考https://www.cnblogs.com/Canyon/p/12030781.html这篇文章开始配置时
启动总是报错:
1
2
3
4
5
6
7
8
9
2020-08-21T04:52:36.332502Z 10 [System] [MY-010597] [Repl] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_applier' executed'. Previous state master_host='', master_port= 3306, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='<NULL>', master_port= 0, master_log_file='', master_log_pos= 4, master_bind=''.
2020-08-21T04:52:36.425811Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error connecting to the local group communication engine instance.'
2020-08-21T04:52:37.468858Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33081'
2020-08-21T04:52:42.549863Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error connecting to the local group communication engine instance.'
2020-08-21T04:52:43.593257Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33081'
2020-08-21T04:52:48.679199Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error connecting to the local group communication engine instance.'
2020-08-21T04:52:49.720298Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33081'
2020-08-21T04:52:54.798558Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error connecting to the local group communication engine instance.'
2020-08-21T04:52:55.838872Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33081'
白名单也设置了,防火墙端口也打开了,依旧不行。各种尝试后发现原来是SELinux搞的鬼
解决方法如下:
1.关闭SELinux,但是这样会不太安全,不是很推荐
1
setenforce 0
2.开放通讯端口(推荐)
1
2
3
yum install -y policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 33081
终于启动起来了。
在MGR集群搭建中还有一些高阶的配置可以参考下下面的设置:
【MySQL高可用集群】MySQL的MGR搭建
https://blog.csdn.net/a1010256340/article/details/136219622
包括binlog和relaylog的设置等
[mysqld] #禁止 MGR 不支持的引擎 disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" server_id=20 report_host = 10.53.207.20 #GTID gtid_mode=ON enforce_gtid_consistency=ON #binlog #log_bin=binlog binlog_format=ROW expire_logs_days=10 binlog_ignore_db = mysql binlog_ignore_db = information_schema binlog_ignore_db = performance_schema binlog_ignore_db = sys #relaylog relay_log_info_repository=TABLE relay_log_recovery = 1 log_slave_updates=ON master_info_repository=TABLE #指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列 transaction_write_set_extraction=XXHASH64 #MGR #服务启动加载安装复制组插件 plugin_load_add='group_replication.so' #复制组名称确保每个机器都一样,可以用“select uuid()”生成 group_replication_group_name="35693218-3d99-11ee-a7ba-489ebd770e95" #MySQL启动时是否自动启动组复制 group_replication_start_on_boot=OFF #当前主机的主机名和复制组端口 group_replication_local_address= "192.168.175.155:24901" #复制组的成员信息
loose-group_replication_group_seeds="192.168.175.155:24901,192.168.175.156:24901,192.168.175.157:24901"
group_replication_ip_whitelist = '192.168.175.155,192.168.175.156,192.168.175.157'
#复制组白名单 #是否引导组服务,如果开启每次重启都会创建新的复制组,所以配置文件中一定要关闭 group_replication_bootstrap_group=OFF #是否单主模式,默认是 #group_replication_single_primary_mode=ON #多主模式下,强制检查每一个实例是否允许写操作,默认关闭 #group_replication_enforce_update_everywhere_checks=OFF
接下线我们来看整个三个节点的详细配置
MySQL官方在 5.7.17版本正式推出组复制(MySQL Group Replication,简称MGR),使用类似 zookeeper 的多于一半原则。在一个集群由 2N+1 个节点共同组成一个复制组,一个事务的提交,必须经过 N+1 (也就是集群节点数 / 2+ 1)个节点决议并通过后才可以提交。这是目前 MySQL 数据库高可用与高扩展的最优解决方案。MGR有以下几个限制条件:
1、存储引擎必须为Innodb,即仅支持InnoDB表
2、每张表必须有主键,用于做write set的冲突检测
3、不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚
4、必须开启GTID特性,二进制日志格式必须设置为ROW,用于选主与write set
5、二进制日志binlog不支持Replication event checksums
6、多主模式(也就是多写模式) 下:不支持SERIALIZABLE事务隔离级别,不完全支持级联外键约束,不支持在不同节点上对同一个数据库对象并发执行DDL
8、只支持ipv4网络,最多支持9个节点
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/a1010256340/article/details/136219622
mgr1主节点的配置
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove the leading "# " to disable binary logging # Binary logging captures changes between backups and is enabled by # default. It's default setting is log_bin=binlog # disable_log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M # # Remove leading # to revert to previous value for default_authentication_plugin, # this will increase compatibility with older clients. For background, see: # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin # default-authentication-plugin=mysql_native_password datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pidi #binlog和relaylog的设置 #禁止 MGR 不支持的引擎 disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #binlog #log_bin=binlog binlog_format=ROW expire_logs_days=10 binlog_ignore_db = mysql binlog_ignore_db = information_schema binlog_ignore_db = performance_schema binlog_ignore_db = sys #relaylog relay_log_info_repository=TABLE relay_log_recovery = 1 log_slave_updates=ON master_info_repository=TABLE #mgr配置如下所示 # 使用mysql_native_password密码策略,防止navicat连不上mysql8 default_authentication_plugin=mysql_native_password # 设置MySQL插件目录:MGR基于插件,必须设置插件路径 plugin_dir=/usr/lib64/mysql/plugin # 服务器编号,Master=1 server_id=1 # 开启binlog的GTID模式(MGR强制要求) gtid_mode=ON # 开启后MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行 enforce_gtid_consistency=ON # 关闭binlog校验(MGR强制要求二进制日志不支持Binlog Event Checksum ) binlog_checksum=NONE # 定义用于事务期间哈希写入提取的算法,组复制模式下必须设置为 XXHASH64。 transaction_write_set_extraction=XXHASH64 # 确定组复制恢复时是否应该应用 SSL,通常设置为“开”,但默认设置为“关”。 loose-group_replication_recovery_use_ssl=ON # 服务器实例所在复制组名称,必须是有效的 UUID,所有节点必须相同。 loose-group_replication_group_name="bbbbbbbb-bbbb-cccc-dddd-eeeeeeeeeeee" # 确定服务器是否应该在服务器启动期间启动组复制。 loose-group_replication_start_on_boot=OFF # 为复制组中其他的成员提供的网络地址,指定为“主机:端口”的格式化字符串。 # 很多人想当然认为端口应该是3306,起始不然,MGR需要开启新端口24901同步交换 # 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可 loose-group_replication_local_address="192.168.175.155:24901" # 用于建立新成员到组的连接组成员列表。 # 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。 # 同样采用n0~n2的主机名替代 loose-group_replication_group_seeds="192.168.175.155:24901,192.168.175.156:24901,192.168.175.157:24901" group_replication_ip_whitelist = '192.168.175.155,192.168.175.156,192.168.175.157' # 配置此服务器为引导组,这个选项必须仅在一台服务器上设置, # 并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。 loose-group_replication_bootstrap_group=OFF
两个从节点的配置如下
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove the leading "# " to disable binary logging # Binary logging captures changes between backups and is enabled by # default. It's default setting is log_bin=binlog # disable_log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M # # Remove leading # to revert to previous value for default_authentication_plugin, # this will increase compatibility with older clients. For background, see: # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin # default-authentication-plugin=mysql_native_password datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #mgr的配置如下所示 default_authentication_plugin=mysql_native_password plugin_dir=/usr/lib64/mysql/plugin #禁止 MGR 不支持的引擎 disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #binlog #log_bin=binlog binlog_format=ROW expire_logs_days=10 binlog_ignore_db = mysql binlog_ignore_db = information_schema binlog_ignore_db = performance_schema binlog_ignore_db = sys #relaylog relay_log_info_repository=TABLE relay_log_recovery = 1 log_slave_updates=ON master_info_repository=TABLE #设置唯一的服务器编号 server_id=30 gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE #这个参数决定primary节点到secondary节点的请求是否为基于 RSA 密钥对的密码交换所需的公钥 loose-group_replication_recovery_get_public_key=ON loose-group_replication_recovery_use_ssl=ON loose-group_replication_group_name="bbbbbbbb-bbbb-cccc-dddd-eeeeeeeeeeee" loose-group_replication_start_on_boot=OFF #设置本机地址n2:24901 # 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可 loose-group_replication_local_address="192.168.175.157:24901" # 用于建立新成员到组的连接组成员列表。 # 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。 # 同样采用n0~n2的主机名替代 loose-group_replication_group_seeds="192.168.175.155:24901,192.168.175.156:24901,192.168.175.157:24901" group_replication_ip_whitelist = '192.168.175.155,192.168.175.156,192.168.175.157' loose-group_replication_bootstrap_group=OFF
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove the leading "# " to disable binary logging # Binary logging captures changes between backups and is enabled by # default. It's default setting is log_bin=binlog # disable_log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M # # Remove leading # to revert to previous value for default_authentication_plugin, # this will increase compatibility with older clients. For background, see: # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin # default-authentication-plugin=mysql_native_password datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid default_authentication_plugin=mysql_native_password plugin_dir=/usr/lib64/mysql/plugin #禁止 MGR 不支持的引擎 disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #binlog #log_bin=binlog binlog_format=ROW expire_logs_days=10 binlog_ignore_db = mysql binlog_ignore_db = information_schema binlog_ignore_db = performance_schema binlog_ignore_db = sys #relaylog relay_log_info_repository=TABLE relay_log_recovery = 1 log_slave_updates=ON master_info_repository=TABLE # 设置唯一的服务器编号 server_id=20 gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE # 这个参数决定primary节点到secondary节点的请求是否为基于 RSA 密钥对的密码交换所需的公钥 loose-group_replication_recovery_get_public_key=ON loose-group_replication_recovery_use_ssl=ON loose-group_replication_group_name="bbbbbbbb-bbbb-cccc-dddd-eeeeeeeeeeee" loose-group_replication_start_on_boot=OFF # 设置本机地址n1:24901 # 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可 loose-group_replication_local_address="192.168.175.156:24901" # 用于建立新成员到组的连接组成员列表。 # 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。 # 同样采用n0~n2的主机名替代 loose-group_replication_group_seeds="192.168.175.155:24901,192.168.175.156:24901,192.168.175.157:24901" group_replication_ip_whitelist = '192.168.175.155,192.168.175.156,192.168.175.157' loose-group_replication_bootstrap_group=OFF
在主服务器的MySQL控制台上,执行下述命令:
接下来就是启动集群的复制操作
在主节点上启动
# 注意:只在主服务器上运行 # 我们在 primary.cnf 配置文件中把 group_replication_bootstrap_group 参数设置成 OFF # 在 primary 服务器启动时并不会直接启动复制组,通过下面的命令动态的开启复制组是我们的集群更安全 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
在两个从服务器MySQL控制台上,执行下述命令:
# 指定主从账户与指定通信频道 CHANGE MASTER TO MASTER_USER="rpl_user", MASTER_PASSWORD="asAS123456!" FOR CHANNEL 'group_replication_recovery'; # 开启组网数据同步 START GROUP_REPLICATION;
当两个从节点都运行完毕后,运行下面SQL结果进行验证:
SELECT * FROM performance_schema.replication_group_members;
出现以下情况,每个节点都是ONLINE
状态,说明集群搭建成功:
3、MySQL MGR 故障转移
上面已经将MySQL MGR集群搭建完毕,并且节点都是ONLINE
状态。
3.1、主节点mgr1下线,重新选举
首先,在主服务器mgr1上执行停止mysql命令,如下:
systemctl stop mysqld;
此时,在从节点mgr2查看集群状态发现,mgr2被选举为主节点:
这是由于MGR集群选举策略为:
- 优先低版本节点
- 版本一样,优先权重大的节点
- 版本与权重一样,按照 server uuid 的字母顺序选主
3.3、恢复 MGR 集群
恢复流程很简单,先将三台服务器的MySQL各自重启:
# 3台服务器都执行 systemctl restart mysqld;
- 1
- 2
然后重复执行
2.2.4 ~ 2.2.5
章节流程即可恢复 MGR 集群。
4、单主模式和多主模式
4.1、模式介绍
4.1.1、单主模式
在单主模式下, 组复制具有自动选主功能,每次只有一个 server成员可以作为主节点。
单主模式 group 内只有一台节点可写可读,其他节点只可以读。对于group的部署,需要先跑起primary主节点,然后再跑起其他的节点,并把这些节点加进group。其他的节点就会自动同步primary节点上面的变化,然后将自己设置为只读模式。
当primary主节点意外宕机或者下线,在满足大多数节点存活的情况下,group内部发起选举,选出下一个可用的读节点,提升为primary节点。
4.1.2、多主模式
在多主模式下,所有的 MySQL 节点都可以同时接受读写操作。group内的所有节点都是primary主节点,同时可以进行读写操作,并且数据是最终一致的。
4.2.1、单主 ——> 多主
从 mgr1 ~ mgr3 停止组复制,开启多主模式(3个节点都执行):
# 停止组复制 stop group_replication; # 是否启用单主模式,默认ON,OFF代表多主 set global group_replication_single_primary_mode=OFF; # 是否开启条件检查,因为多主的约束更为严格,不符合要求的直接拒绝 # 不支持外键的级联操作 # 不支持“串行化Serializable” set global group_replication_enforce_update_everywhere_checks=ON;在 mgr1主节点启用组复制:
# 只在 n0 上执行 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;在 ngr2,mgr3 节点上启用组复制:
# 只在 n1, n2 上执行 START GROUP_REPLICATION;
此时,可以看到三台MySQL都是主节点:
SELECT * FROM performance_schema.replication_group_members;
4.2.2、多主 ——> 单主
从 n0 ~ n2 停止组复制,开启多主模式(3个节点都执行):
# 停止组复制 stop group_replication; # 是否开启条件检查,因为多主的约束更为严格,不符合要求的直接拒绝 # 不支持外键的级联操作 # 不支持“串行化Serializable” set global group_replication_enforce_update_everywhere_checks=OFF; # 是否启用单主模式,默认ON,OFF代表多主 set global group_replication_single_primary_mode=ON;在 mgr1主节点启用组复制:
# 只在 n0 上执行 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;在 mgr1,mgr2 节点上启用组复制:
# 只在 n1, n2 上执行
START GROUP_REPLICATION;此时,可以看到三台MySQL变成了主从模式:
posted on 2024-07-28 18:00 luzhouxiaoshuai 阅读(342) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!