redhat8.9 安装 MySQL 8.4.7 三节点MGR

一、 环境配置

IP 版本 角色
192.168.1.10 redhat 8.9
192.168.1.11 redhat 8.9 从1
192.168.1.12 redhat 8.9 从2

 

1. 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2. 关闭 SELinux

setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

## 安装 MySQL 8.4(所有节点)

1. 创建 mysql 用户(三节点)

useradd -m -d /home/mysql -s /bin/bash mysql
usermod -aG mysql mysql
echo 'mysql' | passwd mysql --stdin 

2. 创建安装目录(三节点)

mkdir /opt/mysql
mkdir /opt/logs
mkdir /home/mysql/etc
chown -R mysql:mysql /opt/mysql /mysql /opt/logs /home/mysql/

3. 下载并解压 MySQL 8.4 安装包(我是下载的Percona MySQL包)(主节点)

tar -zxvf Percona-Server-8.4.7-7-Linux.x86_64.glibc2.28.tar.gz -C /opt/mysql --strip-components=1
chown -R mysql:mysql /opt/mysql/
scp -r /opt/mysql/* mysql@192.168.1.11:/opt/mysql/
scp -r /opt/mysql/* mysql@192.168.1.12:/opt/mysql/
scp /home/mysql/etc/my.cnf mysql@192.168.1.11:/home/mysql/etc
scp /home/mysql/etc/my.cnf mysql@192.168.1.12:/home/mysql/etc

4. 配置系统环境变量(三节点)

su - mysql
echo 'export PATH=/opt/mysql/bin:$PATH' >> .bash_profile
source .bash_profile

二、 配置 MGR 核心参数(所有节点)

-- 创建 MySQL 配置文件 /home/mysql/etc/my.cnf

[mysqld]
basedir = /opt/mysql
datadir = /mysql/data
socket = /mysql/data/mysql.sock
pid-file = /mysql/data/mysqld.pid
log-error = /opt/log/mysqld.log
port = 3306
user = mysql
server_id = 10 # 每个节点唯一,如节点1=10,节点2=11,节点3=12
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
-- MGR 核心配置 -- 启用 GTID(MGR 必需)
gtid_mode = ON
enforce_gtid_consistency = ON
-- 启用二进制日志
log_bin = /mysql/binlog/mysql-bin
-- 启用中继日志
relay_log = /mysql/data/mysql-relay-bin
relay_log_recovery = ON
-- MGR 插件配置
plugin_load_add = group_replication.so
group_replication_group_name = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' # 自定义 UUID,所有节点一致 ,可用uuidgen生成
group_replication_local_address = '192.168.1.10:33061' # 本机IP+MGR通信端口,每个节点改IP
group_replication_group_seeds = '192.168.1.10:33061,192.168.1.11:33061,192.168.1.12:33061' # 所有节点的MGR地址
group_replication_bootstrap_group = OFF # 仅初始化集群时设为ON,其余节点OFF
group_replication_single_primary_mode = true # 单主模式(推荐)
group_replication_enforce_update_everywhere_checks = OFF # 单主模式设为OFF
mysql_native_password=ON # 保持原mysql5密码插件,可选
-- binlog_transaction_dependency_tracking参数已弃用
-- 禁用超级只读(避免主节点只读)
super_read_only = OFF
read_only = OFF

三、 搭建 MGR 集群

1. 初始化操作(所有节点)

su - mysql
cp /home/mysql/etc/my.cnf /home/mysql/etc/my.cnf.bak
vi /home/mysql/etc/my.cnf
mysqld --defaults-file=/home/mysql/etc/my.cnf --initialize-insecure
mysqld_safe --defaults-file=/home/mysql/etc/my.cnf &
mysql -uroot -p --socket=/mysql/data/mysql.sock
alter user 'root'@'localhost' identified by '12345678';
flush privileges;
install plugin group_replication soname 'group_replication.so';
install plugin clone soname 'mysql_clone.so';
shutdown;

-- 取消注释(所有节点)

vi /home/mysql/etc/my.cnf
mysqld_safe --defaults-file=/home/mysql/etc/my.cnf &
mysql -uroot -p12345678 --socket=/mysql/data/mysql.sock

2. 配置mgr同步用户(主库执行)

CREATE USER 'repl'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'repl';
GRANT REPLICATION SLAVE,BACKUP_ADMIN ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

3. 配置 MGR 复制通道(所有节点)

CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';

4. 启动 MGR 集群(仅主节点执行)

set global group_replication_bootstrap_group = ON;
start group_replication;
set global group_replication_bootstrap_group = OFF;

5. 验证集群状态

select a.member_id master_uuid,a.member_host,a.member_port mgrpot,a.member_state mgrstat,a.member_role mgrrole, b.COUNT_TRANSACTIONS_IN_QUEUE cfct_qsz, b.COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE apl_qsz, b.COUNT_TRANSACTIONS_CHECKED ckd_t, b.COUNT_CONFLICTS_DETECTED cfct_dtd, replace(a.channel_name,'group_replication','gr') chan_name from performance_schema.replication_group_members a, performance_schema.replication_group_member_stats b where a.MEMBER_ID=b.member_id order by member_role,member_host;

输出中 MEMBER_STATE 为 ONLINE 表示主节点启动成功。

6. 加入其他节点(从节点,如 192.168.1.11/12)

-- 注意先通过上一步完成初始化

reset binary logs and gtids;
START GROUP_REPLICATION;

-- 再次验证集群状态

7. 数据同步验证 sql

-- 在主节点创建测试库/表

CREATE DATABASE mgr_test;
use mgr_test;
CREATE TABLE test_tb (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO test_tb VALUES (1, 'mgr_test');

-- 在从节点查询,验证数据同步

use mgr_test;
SELECT * FROM test_tb; -- 应显示 (1, 'mgr_test')
posted @ 2025-12-31 16:06  万恶的皮蛋  阅读(1)  评论(0)    收藏  举报