ubuntu20.04之mysql8.0.20的mgr踏坑之路

环境:ubuntu20.04    mysql8.0.20

mgr(Mysql Group Replication) 坑逼之路开始:

1、配置文件路径的坑

首先我的 mysql8.0.20是安装的,不是编译的。有些相关路径和网上不一样。有可能直接安装导致的,也有可能是版本太新导致的。

mysql的配置文件放置路径过多,真他妈多。到底哪个目录是第一读取的呢?mysql8.0.20 的配置文件路径我是靠 故意配错里面的内容让mysql报错 而发现的。

网上一大堆 说是 /etc/my.cnf,在我的实验下发现 第1读取路径是 /etc/mysql/my.cnf。

你要是找不到第1读取路径,任你配置文件配的天花乱坠,你的mgr都搭不起来。

小建议:windows上找到的配置文件,比如我下面给出的配置文件,最好一行一行复制,不要整段复制,以防调入“换行”的坑里

 

2、复制虚拟机的坑

有些人用多个虚拟机模拟多节点,然后采用偷懒模式,直接复制,这个会导致坑的一批,我就是受害者之一。

1)首先检查mysql的auto.cnf文件里面的uuid 是否相同,只要你复制之前已经安装了mysql,一定相同。

这个uuid一定要改成唯一的,也就是每个节点的mysql uuid都不能一样,坑的一批。

2)再次检查主机名是否相同,这个一定相同。每个节点必须改为不一样的,后面要用,不然节点之间识别不了,坑的一批。

我的3个节点主机名被我改为  master/slave1/slave2。

 

3、主机名和ip映射配置的坑

/etc/hosts 下,每个节点的主机名和ip映射需要配置好,后面mgr 内部会用到,坑的一批。例如:

192.168.3.103 master
192.168.3.104 slave1
192.168.3.105 slave2

 

4、配置文件配好了后直接复制到其他节点的坑

因为配置mgr的命令不少,你后面有可能会直接忘记 需要根据每个节点需要小幅度修改配置文件。坑的一批。

最好复制一个就改一个,省的后面忘了自己坑自己。需要修改的也就是server_id和group_replication_local_address。

server_id 每个节点都需要不一样,group_replication_local_address就是本机的 ip:port

修改好后,一定要重启mysql!!!别忘了!!!

 

5、配置文件内容的坑

[mysqld]
#为了只启用InnoDB,因为这个模式只支持InnoDB。防止后面自己坑自己,这条可以不写
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

# 唯一标识,组内的节点一定要 保持不一样
server_id=3

#开启 Replication with Global Transaction Identifiers模式
gtid_mode=ON

#只允许执行可以使用GTID安全记录的语句
enforce_gtid_consistency=ON

#禁用二进制的写检查
binlog_checksum=NONE

#这个为了防止修改主机名导致 复制出问题,XXXX自己填啥都可以,主机名不改这条可以不写.
#主机名改了,/etc/hosts 你的主机名和ip映射也要改。
relay-log=XXXX-relay-bin


#安装插件,写配置文件里,省的手动命令行忘记了
plugin_load_add='group_replication.so'

#组名,组内节点都一样
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

#是否随服务器启动而自动启动组复制,不建议直接启动,有时数据出问题,需要人为干预后,才能启动
group_replication_start_on_boot=off

#本地MGR的IP地址和端口,host:port,是MGR的端口,不是数据库的端口
group_replication_local_address= "192.168.3.105:33061"

#组内成员
group_replication_group_seeds= "192.168.3.103:33061,192.168.3.104:33061,192.168.3.105:33061"

#开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启即可
group_replication_bootstrap_group=off

请确保至少包含以上内容,如果你的版本大于8.0.3。

如果版本小于 8.0.3,还需要包含如下配置:

log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE

 

如果版本小于 8.0.2,还需要包含如下配置:

transaction_write_set_extraction=XXHASH64

 

上面2个额外配置含义,可以在https://dev.mysql.com/doc/refman/8.0/en/group-replication-configuring-instances.html找到。

 

6、启动命令的坑

最后一步了,至于为什么命令要这么写,有的我也不知道,反正不这么搞,出错的可能性很大。

master:

set sql_log_bin=0;
create user 'sroot'@'%' identified by '123123';
grant REPLICATION SLAVE on *.* to 'sroot'@'%';
flush privileges;
set sql_log_bin=1;

CHANGE MASTER TO MASTER_USER='sroot', MASTER_PASSWORD='123123' FOR CHANNEL 'group_replication_recovery';

reset master;
SET GLOBAL group_replication_bootstrap_group=ON; //只有主节点有
start group_replication; 
SET GLOBAL group_replication_bootstrap_group=OFF; //只有主节点有

 

2个slave一样:

set sql_log_bin=0;
create user 'sroot'@'%' identified by '123123';
grant REPLICATION SLAVE on *.* to 'sroot'@'%';
flush privileges;
set sql_log_bin=1;

CHANGE MASTER TO MASTER_USER='sroot', MASTER_PASSWORD='123123' FOR CHANNEL 'group_replication_recovery';

reset master;
start group_replication; 

 

到此,用 SELECT * FROM performance_schema.replication_group_members; 你应该可以看到 MEMBER_STATE 都是ONLINE,

就代表成功了。

如果从库出现 recoverying 状态,一直卡住,那么

stop group_replication;

reset master;

start group_replication;

 

以上是单主多从的命令,如果想配置多主,只需要在start group_replication; 前面加上这2句话就可以了。

set global group_replication_single_primary_mode=FALSE; #是否启动单主模式,
set global group_replication_enforce_update_everywhere_checks=TRUE; #多主模式下,强制检查每一个实例是否允许该操作,

 

其实不建议多主模式,本来就是读多写少。单主模式 ,主提供读写 ,从只提供读。

这不是刚好可以完美读写分离么,主写,从读,完美。

 

最后每个节点的 时钟最好同步一下,mysql对时钟比较敏感。

over,希望大家 搭建愉快。

 

..........................20206/7.....................................

最近发现SELECT * FROM performance_schema.replication_group_members;  的MEMBER_HOST是/etc/hosts里面设置的主机名,实际很不方便,因为程序需要的都是ip 。偶然发现在上述配置文件中加入:

report_host=192.168.3.103

然后重新启动 mgr ,MEMBER_HOST就会变成你设置的ip地址。这样集群内的节点ip 都可以拿到了,方便连接到任意节点

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值