mysql-组复制 -8.4.7 主从搭建

环境介绍

|--------|----------------|-----------------------------------|---------|----|
| 主机名 | 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;

相关推荐
nono牛7 小时前
ps -A|grep gate
android
未知名Android用户8 小时前
Android动态变化渐变背景
android
nono牛9 小时前
Gatekeeper 的精确定义
android
stevenzqzq11 小时前
android启动初始化和注入理解3
android
城东米粉儿13 小时前
compose 状态提升 笔记
android
粤M温同学13 小时前
Android 实现沉浸式状态栏
android
ljt272496066113 小时前
Compose笔记(六十八)--MutableStateFlow
android·笔记·android jetpack
stevenzqzq14 小时前
Android Studio 断点调试核心技巧总结
android·ide·android studio