MySQL 8.4.9主从集群部署

一、环境准备

1.1 清理环境

1、检查是否已经安装过mysql,执行命令
rpm -qa | grep mysql

如果查出来有安装包,使用如下命令清理
rpm -e --nodeps `rpm -qa | grep mysql`

再次执行查询命令,查看是否删除

2、查询所有Mysql对应的文件夹
whereis mysql
mysql: /usr/bin/mysql /usr/include/mysql

find / -name mysql
/data/mysql
/data/mysql/mysql

删除相关目录或文件
rm -rf /usr/bin/mysql /usr/include/mysql /data/mysql /data/mysql/mysql

验证是否删除完毕
whereis mysql
find / -name mysql

3、检查mysql用户组和用户是否存在,如果没有,则创建
cat /etc/group | grep mysql
cat /etc/passwd |grep mysql
groupadd mysql
useradd -s /sbin/nologin -M -g mysql mysql

1.2 安装依赖包

yum install -y libaio numactl-libs ncurses-libs openssl perl

二、安装 MySQL 8.4.9

2.1 下载下载 Bundle 包

下载地址:https://dev.mysql.com/downloads/mysql/
image

2.2 按顺序安装

# 1. 公共文件
rpm -ivh mysql-community-common-8.4.9-1.el8.x86_64.rpm
# 2. 共享库
rpm -ivh mysql-community-libs-8.4.9-1.el8.x86_64.rpm
# 3. 客户端插件
rpm -ivh mysql-community-client-plugins-8.4.9-1.el8.x86_64.rpm
# 4. 客户端
rpm -ivh mysql-community-client-8.4.9-1.el8.x86_64.rpm
# 5. 国际化数据文件
rpm -ivh mysql-community-icu-data-files-8.4.9-1.el8.x86_64.rpm
# 6. 最后安装服务器包
rpm -ivh mysql-community-server-8.4.9-1.el8.x86_64.rpm

2.3 创建数据和日志目录

# 数据目录
mkdir -p /data/mysql/data
# 日志目录
mkdir -p /data/mysql/log
mkdir -p /data/mysql/binlog

chown -R mysql:mysql /data/mysql
chmod -R 755 /data/mysql

2.4 配置主库

vim /etc/my.cnf

[mysqld]
port = 3306
datadir = /data/mysql/data
socket = /data/mysql/mysql.sock
pid-file = /data/mysql/mysqld.pid
user = mysql
bind-address = 0.0.0.0

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 4
max_connections = 1000
max_connect_errors = 100
wait_timeout = 600

innodb_log_file_size = 1G
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1

slow_query_log = 1
slow_query_log_file = /data/mysql/log/slow.log
long_query_time = 15
log_error = /data/mysql/log/mysqld.log

max_allowed_packet = 1000M
lower_case_table_names = 1
skip-symbolic-links

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

server-id = 1
log_bin = /data/mysql/binlog/mysql-bin
binlog_format = ROW
log-bin-trust-function-creators = 1
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 512M

gtid_mode = ON
enforce_gtid_consistency = ON

[mysql]
default-character-set = utf8mb4
socket = /data/mysql/mysql.sock

[client]
socket = /data/mysql/mysql.sock
default-character-set = utf8mb4

2.5 配置从库

vim /etc/my.cnf

[mysqld]
port = 3306
datadir = /data/mysql/data
socket = /data/mysql/mysql.sock
pid-file = /data/mysql/mysqld.pid
user = mysql
bind-address = 0.0.0.0

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 4
max_connections = 1000
max_connect_errors = 100
wait_timeout = 600

innodb_log_file_size = 1G
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1

slow_query_log = 1
slow_query_log_file = /data/mysql/log/slow.log
long_query_time = 15
log_error = /data/mysql/log/mysqld.log

max_allowed_packet = 1000M
lower_case_table_names = 1
skip-symbolic-links

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

server-id = 2
log_bin = /data/mysql/binlog/mysql-bin
relay_log = /data/mysql/binlog/relay-bin
binlog_format = ROW
log-bin-trust-function-creators = 1
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 512M
log_slave_updates = 1
#以下两条配置先注释,等启动完成修改了初始化密码之后再打开
#read_only = 1
#super_read_only = 1

gtid_mode = ON
enforce_gtid_consistency = ON

[mysql]
default-character-set = utf8mb4
socket = /data/mysql/mysql.sock

[client]
socket = /data/mysql/mysql.sock
default-character-set = utf8mb4

2.6 启动数据库:

systemctl start mysqld
systemctl enable mysqld

2.7 修改密码:

获取临时密码
grep 'temporary password' /data/mysql/log/mysqld.log

登录并修改 root 密码:
mysql -uroot -p

ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongRootPass!';

2.8 创建复制用户(主库执行)

-- 创建专用复制账号(使用 caching_sha2_password,MySQL 8.4 默认)
CREATE USER 'repl'@'172.16.10.217' IDENTIFIED BY 'YourStrongRootPass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.16.10.217';
FLUSH PRIVILEGES;

2.9 启动 GTID 复制(从库执行)

STOP REPLICA;
RESET REPLICA ALL;  -- 清除旧的复制配置

CHANGE REPLICATION SOURCE TO
    SOURCE_HOST = '172.16.10.218',
    SOURCE_PORT = 3306,
    SOURCE_USER = 'repl',
    SOURCE_PASSWORD = 'YourStrongRootPass',
    SOURCE_AUTO_POSITION = 1,
    GET_MASTER_PUBLIC_KEY = 1;   -- 关键:允许 caching_sha2_password 无 SSL 连接

START REPLICA;

验证复制状态
SHOW REPLICA STATUS\G

2.10 测试同步

在主库创建测试数据
CREATE DATABASE db_repl_test;
USE db_repl_test;
CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO t1 VALUES (1, 'test1'), (2, 'test2');

在从库查询
SHOW DATABASES LIKE 'db_repl_test';
USE db_repl_test;
SELECT * FROM t1;
如果返回数据,说明同步成功。
posted @ 2026-05-12 14:00  村尚chun叔  阅读(49)  评论(0)    收藏  举报