MySQL 8.0 MGR搭建

1. 简介

MySQL 8.0引入了MGR(MySQL Group Replication)功能,它是一种基于组复制的高可用解决方案。MGR允许多个MySQL实例组成一个组,并通过主节点和多个从节点之间的复制来实现数据的高可用性和冗余性。本文将介绍如何使用MySQL 8.0搭建MGR环境。

2. 环境准备

在开始之前,请确保满足以下条件:

  • 已安装MySQL 8.0版本
  • 至少有两台服务器可用,用于搭建MGR环境

3. 配置主节点

首先,我们需要在一台服务器上配置主节点。在MySQL配置文件中,增加如下配置:

[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=true
binlog_checksum=NONE
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
loose-group_replication_bootstrap_group=ON
loose-group_replication_start_on_boot=OFF

配置说明:

  • server-id=1:设置服务器ID为1,每个节点必须有不同的ID。
  • log-bin=mysql-bin:启用二进制日志,用于复制和恢复数据。
  • gtid_mode=ON:启用全局事务标识(GTID)模式,用于跟踪复制进度。
  • enforce_gtid_consistency=true:确保复制进程只能执行具有相同GTID的事务。
  • binlog_checksum=NONE:关闭二进制日志的校验和功能。
  • master_info_repository=TABLE:将主节点的信息存储在表中。
  • relay_log_info_repository=TABLE:将中继日志的信息存储在表中。
  • transaction_write_set_extraction=XXHASH64:启用事务写集提取,加速复制进程。
  • loose-group_replication_bootstrap_group=ON:启动MGR组的引导过程。
  • loose-group_replication_start_on_boot=OFF:关闭服务器启动时自动启动MGR组。

保存并重启MySQL服务。

4. 启动从节点

在其它服务器上安装MySQL 8.0,并在配置文件中进行如下配置:

[mysqld]
server-id=2
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=true
binlog_checksum=NONE
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="7f13a1d9-0e9d-4a3c-81ad-3db6bbd1a610"
loose-group_replication_start_on_boot=ON

配置说明:

  • server-id=2:设置服务器ID为2。
  • log-bin=mysql-bin:启用二进制日志。
  • gtid_mode=ON:启用GTID模式。
  • enforce_gtid_consistency=true:确保复制进程只能执行具有相同GTID的事务。
  • binlog_checksum=NONE:关闭二进制日志的校验和功能。
  • master_info_repository=TABLE:将主节点的信息存储在表中。
  • relay_log_info_repository=TABLE:将中继日志的信息存储在表中。
  • transaction_write_set_extraction=XXHASH64:启用事务写集提取。
  • loose-group_replication_group_name="7f13a1d9-0e9d-4a3c-81ad-3db6bbd1a610":设置MGR组的名称,与主节点保持一致。
  • loose-group_replication_start_on_boot=ON:设置服务器启动时自动启动MGR组。

保存并重启MySQL服务。

5. 创建MGR组

在主节点上执行以下命令创建MGR组:

SET SQL_LOG_BIN=0;
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so