Mysql5.7的组复制方法

时间:2024-04-06 12:23:52

环境:

         虚拟机系统版本:linux 6.5

实验主机:

         server3 : 172.25.17.3

         server4 : 172.25.17.4

         server5 : 172.25.17.5

###建议:在书写sql语句时,如果要使用大写就全部使用大写(大写更规范),如果要使用小写就全部使用小写。否则可能会像我一样,授权用户为MYSQL,接入组时却使用了mysql,导致接入失败。

一  设定组并将server3添加进去:

1.先将server3端数据库服务停掉,然后进入/var/lib/mysql目录,删除面的所有文件和目录,重新进行数据库的初始化:

Mysql5.7的组复制方法

2.编辑数据库的配置文件/etc/my.cnf ,写入组服务配置:

Mysql5.7的组复制方法

这些设置将server3配置为使用唯一标识号3,以启用全局事物标示符,并将复制元数据存储在系统表(而不是文件)中。此外它设置server3打开二进制日志记录,使用基于行的格式并禁用二进制日志事件校验和。

继续在配置文件中写入组复制的设置:

   ###第 39行指示 server 必须为每个事务收集写集合,并使用 XXHASH64 哈希算法将其编码为散列。

   ###第 40 行告知插件,正在加入或创建的组要命名为967f9d22-9c7d-11e8-8f7c-52540053a83f。这个码就是虚拟机端的uuid,至于 这个uuid的获取方式,可以在其他另外两台虚拟机中的随便一台,进入数据库执行select uuid()就可以得到一个uuid了:

 Mysql5.7的组复制方法

   ###第 41行指示插件在 server 启动时不自动启动组复制。

   ###第 42 行告诉插件使用 IP 地址 为本地主机,端口 24901 用于接受来自组中其他成员的传入连接。

   ###第 45行告诉插件,当下面这些 server 需要加入组时,应该连接到这些主机和端口*问他们。 这些就是种子成员,当此成员想要连接到组时使用,在申请加入时,server 先访问这些种子成员中的一个,然后它请求组重新配置以允许它加入组。 需要注意的是,此选项不需要列出组中的所有成员,而是当此 sever 需要加入该组时需要访问的 server 列表。启动组的 server 不使用此选项,因为它是初始 server,因此它负责引导组。 第二个加入的 server 向组中的唯一成员申请加入,然后组得以扩容。 第三个加入的 server 可以向这两个 server 中的任意一个申请加入,然后组再次扩容。 后续 server 在加入时重复此过程。

Mysql5.7的组复制方法

3.在配置文件编辑完成之后,开启数据库服务,这时将会重新进行数据库的初始化:

Mysql5.7的组复制方法

如果初始化失败,可能是配置文件写的有问题,在mysql服务的日志里查找原因,然后仔细即检查校对配置文件。如果开启服务失败,在第二次开启之前,要重新删除/var/lib/mysql目录下的文件,然后关闭mysql服务,再开启。

4.初始化完成之后,重新配置数据库密码并进入数据库。

   创建具有replication-slave权限的mysql用户,并且不把此操作记录到二进制文件中:

Mysql5.7的组复制方法

使用 CHANGE MASTER TO 语句将 server3 配置为,在下次需要从其他成员恢复其状态时,使用 group_replication_recovery 复制通道的给定凭据:

Mysql5.7的组复制方法

5.启动组复制:

安装组复制插件并使用show plugins指令查看插件安装状态:

Mysql5.7的组复制方法

插件成功安装:

Mysql5.7的组复制方法

6.指示引导组,然后启动组复制程序。该引导程序仅由单个server独立完成,该server组启动并且只启动一次:

Mysql5.7的组复制方法

查看组状态:server3确实存在于组中:

Mysql5.7的组复制方法

为了演示server3确实在一个组中,并且能够加载处理,创建一个表并向其中添加内容:

Mysql5.7的组复制方法

使用指令show binlog events;可以查看表userlist和二进制日志的内容,包括新建表,给表中插入数据等信息:

Mysql5.7的组复制方法

二  向组中添加新的实例

1.在server4端,同样删除/var/lib/musql目录下的所有内容,编辑配置文件后开启数据库,重新进行数据库的初始化并配置密码。

   在配置文件中需要修改下图中29行的server_id和42行的local_address设定为本机ip:

Mysql5.7的组复制方法

2.进入数据库:

类似于在server3端的操作:

Mysql5.7的组复制方法

启动组复制:

Mysql5.7的组复制方法

查看组状态:ONLINE表示添加成功:

Mysql5.7的组复制方法

这样就可以在server4端查看到在server3端建立的数据库tets了。用类似的方法也可以将server5加入到组里,只需要修改配置文件中的sever-id和local_address,其他操作和server4类似。