当前位置: 首页 > news >正文

MySQL8.0.37组复制MGR配置详解

目录

环境准备

拉起容器节点

容器中安装用到的工具

配置hosts文件

安装插件

创建复制用户

my.cnf文件配置

master节点

slave1节点

slave2节点

启动MGR

master节点

slave1节点

slave2节点

查看三个节点是否加入组内

问题分析

端口问题

端口参数配置问题

连接到源服务器时用户名无效

hosts文件配置问题

slave节点执行的事务比组中存在的事务多


master

slave1

slave2

IP

172.17.0.5

172.17.0.6

172.17.0.7

VERSION

8.0.37

8.0.37

8.0.37

环境准备

拉起容器节点

#拉起master节点
docker run -itd --name mysql_mgr_master_8.0.37 -e MYSQL_ROOT_PASSWORD=123456 -p 3310:3306 -v /var/lib/docker/mysql-mgr-master-8.0.37:/var/lib/mysql 8279f68ee77d
#拉起slave1节点
docker run -itd --name mysql_mgr_slave1_8.0.37 -e MYSQL_ROOT_PASSWORD=123456 -p 3320:3306 -v /var/lib/docker/mysql-mgr-slave1-8.0.37:/var/lib/mysql 8279f68ee77d
#拉起slave2节点
docker run -itd --name mysql_mgr_slave2_8.0.37 -e MYSQL_ROOT_PASSWORD=123456 -p 3330:3306 -v /var/lib/docker/mysql-mgr-slave2-8.0.37:/var/lib/mysql 8279f68ee77d

容器中安装用到的工具

拉起三个节点后进入容器使用microndnf命令安装下面两个工具,等会配置的时候需要用到

microdnf install -y vim net-tools

配置hosts文件

三个节点都要配置

这里有个遗留问题,不知道为什么每次容器重启后hosts文件都会重置,导致MGR复制出错,详见问题分析

error log

Error connecting to source 'rep@fd8fe63cc738:3306'. This was attempt 1/1, with a delay of 60 seconds between attempts. Message: Unknown MySQL server host 'fd8fe63cc738' (-2)

#容器节点ip      #容器id
172.17.0.5      fd8fe63cc738
172.17.0.6      e5b0f9986741
172.17.0.7      6d570814d8bb

安装插件

三个节点中分别安装MGR插件

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

创建复制用户

创建用来复制的用户

create user 'rep'@'%' identified by '123456';
grant replication slave on *.* to 'rep'@'%' ;
flush privileges;

my.cnf文件配置

下面文件中使用的UUID随机生成就可以

select uuid();

master节点

port = 3306
bind-address = 0.0.0.0

log-bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1

#Plugin_dir=/usr/lib64/mysql/plugin

#禁用二进制日志事件校验,MGR不支持带checksum的binlog event
binlog_checksum=NONE

loose-group_replication_recovery_get_public_key=ON
loose-group_replication_recovery_use_ssl=ON

#使用哈希算法
transaction_write_set_extraction=XXHASH64
#组复制的组名
loose-group_replication_group_name="ba3350b0-0abc-11f0-a872-0242ac110006"
#不自动启动组复制
loose-group_replication_start_on_boot=OFF
#本机地址和端口
loose-group_replication_local_address="172.17.0.5:33061"
#组中成员
loose-group_replication_group_seeds="172.17.0.5:33061,172.17.0.6:33061,172.17.0.7:33061"
#不启用引导组,手动引导启动
loose-group_replication_bootstrap_group=OFF

slave1节点

port = 3306
bind-address = 0.0.0.0

log-bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1

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="ba3350b0-0abc-11f0-a872-0242ac110006"
loose-group_replication_start_on_boot=OFF

loose-group_replication_local_address="172.17.0.6:33061"
loose-group_replication_group_seeds="172.17.0.5:33061,172.17.0.6:33061,172.17.0.7:33061"
loose-group_replication_bootstrap_group=OFF

slave2节点

port = 3306
bind-address = 0.0.0.0

log-bin
server-id=3
gtid_mode=ON
enforce_gtid_consistency=1

binlog_checksum=NONE

loose-group_replication_recovery_get_public_key=ON
loose-group_replication_recovery_use_ssl=ON
loose-group_replication_group_name="ba3350b0-0abc-11f0-a872-0242ac110006"
loose-group_replication_start_on_boot=OFF

loose-group_replication_local_address="172.17.0.7:33061"
loose-group_replication_group_seeds="172.17.0.5:33061,172.17.0.6:33061,172.17.0.7:33061"
loose-group_replication_bootstrap_group=OFF

启动MGR

master节点

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

slave1节点

#指定主从账户与指定通信频道
CHANGE MASTER TO
    MASTER_USER = 'rep',
    MASTER_PASSWORD = '123456'
    FOR CHANNEL 'group_replication_recovery';
#启动组复制
START GROUP_REPLICATION;

slave2节点

#指定主从账户与指定通信频道
CHANGE MASTER TO
    MASTER_USER = 'rep',
    MASTER_PASSWORD = '123456'
    FOR CHANNEL 'group_replication_recovery';
#启动组复制
START GROUP_REPLICATION;

查看三个节点是否加入组内

SELECT * FROM performance_schema.replication_group_members;

问题分析

端口问题

mysql没有监听tcp4的3306端口,导致MGR复制失,再配置文件中开启即可

port = 3306
bind-address = 0.0.0.0

端口参数配置问题

下面的这两个参数配置错误导致组成员无法加入复制组

loose-group_replication_local_address="172.17.0.5:3306"
loose-group_replication_group_seeds="172.17.0.5:3306,172.17.0.6:3306,172.17.0.7:3306"

修该端口号即可

loose-group_replication_local_address="172.17.0.5:33061"
loose-group_replication_group_seeds="172.17.0.5:33061,172.17.0.6:33061,172.17.0.7:33061"

连接到源服务器时用户名无效

这里报错是因为再指定主从账户与指定通信频道的时候还是使用了异步复制的那套配置,查看官方文档后发现这里其实是有区别的

https://dev.mysql.com/doc/refman/8.0/en/group-replication-adding-instances.html

但是这里改变之后又遇到了另一个问题,无法在通道“group_REPLICATION_recovery”上使用给定参数更改复制源,起初以为是复制通道名称的问题,但是换掉名称还是不行,后来查看官网后发现这里没有获取公钥的配置(GET_MASTER_PUBLIC_KEY = 1),去掉后果然成功了,但是为什么?

最初GET_MASTER_PUBLIC_KEY = 1是为了解决MySQL8.0中密码插件改变导致异步复制的时候slave节点使用rep复制账号连接失败的问题,但是为什么这里指定通道后会出现这个问题?(待分析)

error log

ERROR 3139 (HY000): CHANGE REPLICATION SOURCE with the given parameters cannot be performed on channel 'group_replication_recovery'.

https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html

嗯,经过一段的时间的排查确定了group_replication_recovery通道有自己的安全机制和配置要求,所以在配置通道的时候不允许使用get_master_public_key

昨天搭建好后,今天去看发现master节点的容器挂掉了,slave1节点选举成了新的master节点,

嗯,发现这个问题后手动的拉起了之前挂掉的master节点,但是拉起之前挂掉master节点后,发现处于recovering状态,于是赶紧去看error log,这就出现了之前提到了8.0密码插件的问题(在从库连接主库的时候使用的是不被 caching_sha2_password认可的RSA公钥,所以主库MySQL拒绝了数据库连接的请求,从而,从库报错’caching_sha2_password’ reported error:Authentication require secure connection。)

select * from performance_schema.replication_connection_status\G

嗯,在组复制中要解决这个问题其实也很简单只需要在MySQL的配置文件中加入

loose-group_replication_recovery_get_public_key=ON就可以了

hosts文件配置问题

最开始的时候其实是没有去配置hosts文件的,导致出现找不到主机的报错,再容器节点的hosts文件中添加主机映射就可以了,

error log

2025-03-27T08:59:18.354273Z 25 [ERROR] [MY-010584] [Repl] Replica I/O for channel 'group_replication_recovery': Error connecting to source 'rep@fd8fe63cc738:3306'. This was attempt 1/1, with a delay of 60 seconds between attempts. Message: Unknown MySQL server host 'fd8fe63cc738' (-2), Error_code: MY-002005

但是这里又遇到一个问题,容器节点重启的时候会重置hosts文件,

嗯,经过一段时间的定位,原因找到了,但是怎么解决呐

csdn:docker容器重启之后/etc下某些配置文件被重置的问题_docker run gitlab重启配置文件被还原-CSDN博客

解决方法:可以再容器中写个脚本去自动修改hosts文件,然后再容器启动的时候自动执行这个脚本(/etc/rc.local),最后在/root/.bashrc文件中重新加载下就可以了

#/etc/rc.local
echo "127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.5      fd8fe63cc738
172.17.0.6      e5b0f9986741
172.17.0.7      6d570814d8bb" > /etc/hosts
#/root/.bashrc
source /etc/rc.local

slave节点执行的事务比组中存在的事务多

解决方法:

停止组复制-清除事务日志-重启组复制

STOP GROUP_REPLICATION;
RESET MASTER;
START GROUP_REPLICATION;

相关文章:

  • 零基础被迫参加CTF比赛?CTF高频解题技巧与经验分享
  • 深入了解 MySQL 锁机制
  • 饮料购物商城基于Spring Boot SSM
  • java 面试题记录
  • C++ 变量的声明与定义分离式编译与静态类型(十六)
  • 基于 SpringBoot 的火车订票管理系统
  • 万字长文详解Text-to-SQL
  • 从 0 到跑通的 Qt + OpenGL + VS 项目的完整流程
  • 算法刷题记录——LeetCode篇(1.5) [第41~50题](持续更新)
  • Neo4j【环境部署 03】插件APOC和ALGO配置使用实例分享(网盘分享3.5.5兼容版本插件)
  • 【Windows】win10系统安装.NET Framework 3.5(包括.NET 2.0和3.0)失败 错误代码:0×80240438
  • 【最新】探索CFD的未来:从OpenFOAM到深度学习,全面解析计算流体力学的顶级资源与前沿技术
  • c++并发编程阅读笔记
  • Oracle logminer详解
  • 鸿蒙NEXT开发日志工具类(ArkTs)
  • 全新UI好看404页面源码
  • Unity的UI适配
  • Qt常用宏定义判断大全
  • 从纸质到 AI 时代:我的笔记工具探索之旅
  • Z-Wave与Matter的协同应用:构建无缝互联的智能家居
  • 万网虚拟服务器怎么做网站内容/公司网站制作公司
  • 澄迈网站建设/优秀企业网站模板
  • 自己做b2b平台网站建设/百度的营销推广
  • 建站点怎么做网站/吉林seo外包
  • 网站域名备案注销/资阳地seo
  • 做网站哪个平台好/搜狗网址