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;

相关推荐
Kapaseker13 分钟前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴39 分钟前
Android17 为什么重写 MessageQueue
android
阿巴斯甜21 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android