环境介绍
|--------|----------------|-----------------------------------|---------|----|
| 主机名 | IP地址 | Os版本 | MySQL版本 | 备注 |
| mysql1 | 192.168.40.128 | openEuler release 24.03 (LTS-SP2) | 8.4.7 | |
| mysql2 | 192.168.40.129 | openEuler release 24.03 (LTS-SP2) | 8.4.7 | |
| mysql3 | 192.168.40.130 | openEuler release 24.03 (LTS-SP2) | 8.4.7 | |
软件下载
https://dev.mysql.com/downloads/mysql/
MySQL 8.4.7 是长期支持版本。

历史版本在这个链接下载即可
https://downloads.mysql.com/archives/community/

软件安装部署
修改服务器的环境
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
systemctl disable firewalld --now
cat >>/etc/hosts<<EOF
192.168.40.128 mysql1
192.168.40.129 mysql2
192.168.40.130 mysql3
EOF
useradd mysql
三台服务器做互信
ssh-copy-id mysql1
ssh-copy-id mysql2
ssh-copy-id mysql3
软件安装
dnf localinstall -y mysql-community-client-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-client-debuginfo-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-client-plugins-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-client-plugins-debuginfo-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-common-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-debuginfo-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-debugsource-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-devel-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-icu-data-files-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-libs-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-libs-compat-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-libs-compat-debuginfo-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-libs-debuginfo-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-server-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-server-debug-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-server-debug-debuginfo-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-server-debuginfo-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-test-8.4.7-1.el8.x86_64.rpm
dnf localinstall -y mysql-community-test-debuginfo-8.4.7-1.el8.x86_64.rpm
MySQL 数据库初始化
My.cnf参数文件配置
三台数据库相同的配置参数
For advice on how to change settings please see
http://dev.mysql.com/doc/refman/8.4/en/server-configuration-defaults.html
mysqld
Remove leading # and set to the amount of RAM for the most important data
cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
innodb_buffer_pool_size = 128M
Remove the leading "# " to disable binary logging
Binary logging captures changes between backups and is enabled by
default. It's default setting is log_bin=binlog
disable_log_bin
Remove leading # to set options mainly useful for reporting servers.
The server defaults are faster for transactions and fast SELECTs.
Adjust sizes as needed, experiment to find the optimal values.
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
==================== 基础身份与路径设置 ====================
user = mysql
port = 3306
【关键修正】请确认MySQL的真实安装路径。如果通过yum/apt安装,通常为 /usr
可以使用 `which mysqld` 或 `find / -name mysqld 2>/dev/null` 查找
datadir = /data/mysql
socket = /data/mysql/mysql.sock
#socket = /var/lib/mysql/mysql.sock
log-error = /data/mysql_error.log
pid-file = /var/run/mysqld/mysqld.pid
【重要】指定错误消息文件目录,解决 "Can't find error-message file" 错误
lc-messages-dir = /usr/share/mysql-8.4/
==================== 服务器唯一标识 ====================
server-id = 1
report-host = 192.168.40.128
==================== 内存与缓冲池优化 ====================
innodb_buffer_pool_size = 768M
innodb_buffer_pool_instances = 2
innodb_log_buffer_size = 16M
==================== InnoDB 引擎基础优化 ====================
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 200
innodb_io_capacity_max = 400
innodb_redo_log_capacity = 200M
innodb_read_io_threads = 2
innodb_write_io_threads = 2
innodb_thread_concurrency = 2
==================== 二进制日志与复制基础 (更新弃用参数) ====================
log_bin = /data/mysql_binlog/mysql-bin
【弃用参数替换】binlog_format 已弃用,MySQL 8.4 默认且强制为ROW格式,可删除此行
binlog_format = ROW
max_binlog_size = 100M
gtid_mode = ON
enforce_gtid_consistency = ON
【弃用参数替换】将 log_slave_updates 改为 log_replica_updates
log_replica_updates = ON
binlog_cache_size = 1M
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema
binlog_ignore_db = sys
==================== 连接与线程控制 ====================
max_connections = 300
thread_cache_size = 16
table_open_cache = 512
==================== 组复制 (MGR) 专用配置 ====================
plugin_load_add = 'group_replication.so'
loose-group_replication_group_name = "f0a58a6e-eb1f-11f0-a393-000c29e0db92"
loose-group_replication_local_address = "192.168.40.128:33061"
loose-group_replication_group_seeds = "192.168.40.128:33061,192.168.40.129:33061,192.168.40.130:33061"
loose-group_replication_start_on_boot = OFF
loose-group_replication_single_primary_mode = ON
loose-group_replication_enforce_update_everywhere_checks = OFF
loose-group_replication_member_expel_timeout = 10
loose-group_replication_transaction_size_limit = 10485760
loose-group_replication_message_cache_size = 256M
loose-group_replication_flow_control_mode = "DISABLED"
==================== 其他优化与安全 ====================
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
skip_name_resolve = 1
relay_log_recovery = 1
【弃用参数替换】将 slave_net_timeout 改为 replica_net_timeout
replica_net_timeout = 60
interactive_timeout = 28800
wait_timeout = 28800
设置MySQL插件目录:MGR基于插件,必须设置插件路径
plugin_dir=/usr/lib64/mysql/plugin
关闭binlog校验(MGR强制要求)
binlog_checksum=NONE
确定组复制恢复时是否应该应用 SSL,通常设置为"开",但默认设置为"关"。
loose-group_replication_recovery_use_ssl=ON
配置此服务器为引导组,这个选项必须仅在一台服务器上设置,
并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。
loose-group_replication_bootstrap_group=OFF
备库需要增加的参数
#设置只读数据库 备库设置
read_only = 0
super_read_only = 0
各台数据库根据自身ip 情况需要设置的参数
loose-group_replication_local_address = "192.168.40.128:33061"
report_host = 192.168.40.128
server_id = 2
实际初始化数据库
mkdir -p /data/mysql
mkdir -p /data/mysql_binlog/
touch /data/mysql_error.log
rm -rf /data/mysql/*
rm -rf /data/mysql_binlog/*
touch /data/mysql_error.log
> /data/mysql_error.log
chown -R mysql:mysql /data/
systemctl restart mysqld
用户处理(所有节点)
root 用户处理
cat /data/mysql_error.log | grep password 寻找生成的临时 密码

进入MySQL后 执行如下命令 修改 root 密码
mysql -uroot -p --socket=/data/mysql/mysql.sock
alter user 'root'@'localhost' identified by 'Swg@_202510';
set GLOBAL super_read_only = 0;
update mysql.user set host='%' where user='root';
flush privileges;
exit
mysql -uroot -p'Swg@_202510' --socket=/data/mysql/mysql.sock
exit
添加复制和克隆用户
###创建用户
mysql -uroot -p'Swg@_202510' --socket=/data/mysql/mysql.sock
select version();
set sql_log_bin=0;
#创建主从账号(在三台节点上都需要执行):
set global validate_password.policy=0;
create user if not exists 'repl'@'%' identified by 'Repl_1234';
grant reload, super, replication slave,connection_admin, group_replication_stream,backup_admin,CLONE_ADMIN on *.* to 'repl'@'%';
grant all privileges on *.* to 'repl'@'%';
flush privileges;
show grants for repl;
set sql_log_bin=1;
MySQL 组复制(MGR)搭建
MySQL环境检查
SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
show binary log status;
select version();
SELECT member_id, member_host, member_port, member_state, member_role FROM performance_schema.replication_group_members;
select host,user,authentication_string from mysql.user;
安装插件
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
检查插件安装情况
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME in('clone','group_replication','auth_socket');
克隆主库数据到备库
mysql -urepl -p'Repl_1234' --socket=/data/mysql/mysql.sock
SET GLOBAL clone_valid_donor_list = '192.168.40.128:3306';
CLONE INSTANCE FROM 'repl'@'192.168.40.128':3306 IDENTIFIED BY 'Repl_1234';
传统方式 备份恢复数据库
mysqldump -uroot -p'Swg@_202510' --single-transaction --all-databases > all_databases.sql
----备库执行
mysql> \. all_databases.sql
mysql -uroot -p'Swg@_202510' < all_databases.sql
开启组复制 模式
注意:只在主服务器上运行
我们在 primary.cnf 配置文件中把 group_replication_bootstrap_group 参数设置成 OFF
在 primary 服务器启动时并不会直接启动复制组,通过下面的命令动态的开启复制组是我们的集群更安全
SET GLOBAL group_replication_bootstrap_group=ON;
STOP GROUP_REPLICATION ;
RESET REPLICA ALL;
CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='Repl_1234' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION USER='repl', PASSWORD='Repl_1234';
SET GLOBAL group_replication_bootstrap_group=OFF;
SELECT member_id, member_host, member_port, member_state, member_role FROM performance_schema.replication_group_members;
mysql2 和 mysql 3
STOP GROUP_REPLICATION ;
RESET REPLICA ALL;
CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='Repl_1234' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION USER='repl', PASSWORD='Repl_1234';
开启主从集群模式
stop replica;
RESET REPLICA ALL;
show binary log status;
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.40.128', SOURCE_USER='repl', SOURCE_PASSWORD='Repl_1234', SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=627,SOURCE_SSL=0,GET_SOURCE_PUBLIC_KEY=1;
start replica;
show replica status \G;