网站建设知识
mysql5.7新特性(Mysql Group Replication)
2025-07-22 11:15  点击:1

mysql5.7新特性(Mysql Group Replication)。mysql5.7引入了一个很令人振奋的新特性,让mysql的主从复制更加方便简单,而且扫清了MySQL进入金融行业最后的障碍。

集群拓扑:

mysql版本: Ver 14.14 Distrib 5.7.17

发行版版本:Red Hat Enterprise Linux Server release 7.0 (Maipo)

一.mysql5.7的yum安装(在systemd下)

在mysql官网上下载rpm包进行安装:

建议下载Bundle版本,这种版本相当于全家桶版本,解压后直接无脑yum安装即可。(建议使用梯子下载。或者将链接拷贝到迅雷上,要不然下载速度感人)

解压后如下:

[root@mgr1 mysql]# ls

mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar

mysql-community-client-5.7.17-1.el7.x86_64.rpm

mysql-community-common-5.7.17-1.el7.x86_64.rpm

mysql-community-devel-5.7.17-1.el7.x86_64.rpm

mysql-community-embedded-5.7.17-1.el7.x86_64.rpm

mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm

mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm

mysql-community-libs-5.7.17-1.el7.x86_64.rpm

mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm

mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm

mysql-community-server-5.7.17-1.el7.x86_64.rpm

mysql-community-server-minimal-5.7.17-1.el7.x86_64.rpm

mysql-community-test-5.7.17-1.el7.x86_64.rpm

虽然全安装上肯定没有问题,但是想embedded(嵌入式版本)总不需要安装了吧,最后选择安装的rpm包如下。

yum install mysql-community-server-5.7.17-1.el7.x86_64.rpm \

mysql-community-client-5.7.17-1.el7.x86_64.rpm \

mysql-community-common-5.7.17-1.el7.x86_64.rpm \

mysql-community-libs-5.7.17-1.el7.x86_64.rpm \

mysql-community-test-5.7.17-1.el7.x86_64.rpm \

mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm

安装好后要注意了,由于使用的是rhel7.0所以默认使用的服务管理是SysV,我们这里要在/etc/systemd/system创建systemctl的脚本全局配置文件,在/etc/systemd/system下创建mysql.service.d目录,并在其下创建override.conf配置文件。

[root@mgr1 mysql.service.d]# pwd

[root@mgr1 mysql.service.d]# ls

override.conf

配置内容如下:

[Service]

LimitNOFILE=1024 #打开文件描述符的限制

PIDFile=/var/lib/mysql/mysqld.pid #指定pid文件的位置

Nice=0 #启动等级

LimitCore=1 #限制的cpu数

#Environment="LD_PRELOAD=/path/to/malloc/library"

Environment="TZ=Asia/Shanghai" #设置市区

配置这些之后,要使用systemctl重新加载一遍。

[root@mgr1 mysql.service.d]# systemctl daemon-reload

现在就可以使用systemctl命令控制mysql的服务了。

二 配置mgr

2.1主从复制配置

mgr是一种主从复制的自动化,所以在配置他之前,仍然要先配置主从复制。

在mgr1,mgr2,mgr3上均写入如下配置

server_id=1 #每台的id当然不能一样了

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

binlog_checksum=NONE

log_slave_updates=ON

log_bin=binlog

binlog_format=ROW

2.2 mgr的环境准备

1)

mgr是以一个插件的形式来安装的,下面是安装mgr插件,在mgr1,mgr2,mgr3上都要执行。

mysql> INSTALL PLUGIN group_replication SonAME 'group_replication.so';

Query OK, 0 rows affected (0.01 sec)

查看是否安装成功

mysql> show plugins;

*************************** 45. row ***************************

Name: group_replication

Status: ACTIVE

Type: GROUP REPLICATION

Library: group_replication.so

License: GPL

45 rows in set (0.00 sec)

看到上面的显示后说明安装成功。

2)

在my.cnf配置文件中加入如下配置

transaction_write_set_extraction = XXHASH64

loose-group_replication_group_name = "5f847ff2-d701-11e6-819c-b8ca3af6e36c"

loose-group_replication_start_on_boot = off

loose-group_replication_local_address = "mgr1.mo:23306"#这里每台机器上是不一样的

loose-group_replication_group_seeds = "mgr1.mo:23306,mgr2.mo:23307,mgr3.mo:23308"

loose-group_replication_bootstrap_group = off

loose-group_replication_single_primary_mode = true

loose-group_replication_enforce_update_everywhere_checks = false

三 开启mysql集群

这里可以参考mysql的官方文档

mysql mgr部分官方文档

但是官方文档没有说清一些配置,我们直接采用会踩坑。

首先设置

mysql> SET GLOBAL group_replication_bootstrap_group = ON;

设置后就相当于以设置这个参数的机器为复制的master。这里也是官方文档提到的。之后直接开启集群即可

mysql> START GROUP_REPLICATION;

但是我们出现了启动错误

我们观察配置文件后,发现了如下的ERROR

2017-04-07T15:08:13.077950Z 0 [Warning] Plugin group_replication reported: '[GCS] Connection attempt from IP address 172.25.3.201 refused. Address is not in the IP whitelist.'

经过查阅后我们加入如下参数

mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;

mysql> SET GLOBAL group_replication_ip_whitelist='172.25.3.201/24,127.0.0.1/8';

现在再启动集群问题就解决,在其他机器上,只需执行查阅后的那两个步骤和开启集群,同步集群就配置好了。

如果看到如下显示代表确实配置成功

mysql> select * from performance_schema.replication_group_members\G

*************************** 1. row ***************************

CHANNEL_NAME: group_replication_applier

MEMBER_ID: 2b5b9e8b-1b6d-11e7-a53a-52540096854f

MEMBER_HOST: mgr3.mo

MEMBER_PORT: 3306

MEMBER_STATE: ONLINE

*************************** 2. row ***************************

CHANNEL_NAME: group_replication_applier

MEMBER_ID: 2f2d2c9c-1abc-11e7-8c6c-5254008dffba

MEMBER_HOST: mgr1.mo

MEMBER_PORT: 3306

MEMBER_STATE: ONLINE

*************************** 3. row ***************************

CHANNEL_NAME: group_replication_applier

MEMBER_ID: c36fcb84-1b78-11e7-b3eb-525400ad6241

MEMBER_HOST: mgr2.mo

MEMBER_PORT: 3306

MEMBER_STATE: ONLINE

3 rows in set (0.00 sec)

如上代表3个节点都配置好了。

现在创建db1库并创建test表插入一些数据测试

mysql> insert into test values(1,'mo');

ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin

插入数据的时候出现了如上问题,这里原因是group_replaction环境下面,表必须有主键不然不允许往里insert值。所以修改表t1,将id字段设置程主键即可。

mysql> alter table test modify id int primary key;

Query OK, 0 rows affected (0.75 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> insert into test values(1,'mo');

Query OK, 1 row affected (0.55 sec)

现在插入成功在mgr2上查询

mysql> select * from test;

+----+------+

| id | name |

+----+------+

| 1 | mo |

+----+------+

通过上面测试表示mgr已经配置成功。