openEuler MySQL 8.0 主从复制部署与排错步骤
openEuler MySQL 8.0 主从复制部署与排查步骤
参考博客:https://www.cnblogs.com/gxl2004/p/19931158
一、前置环境准备
1. 节点规划
| 节点角色 | 主机名 | IP 地址 |
|---|---|---|
| 主库 Master | master | 192.168.10.229 |
| 从库 Slave | slave | 192.168.10.230 |
2. 双节点共同执行(主 + 从都要操作)
以下命令在 master 和 slave 两台机器上完全一致,均需执行。
(1)配置主机名解析
vim /etc/hosts
文件末尾追加:
192.168.100.4 master
192.168.100.5 slave
(2)关闭防火墙与 SELinux
# 关闭防火墙并禁用开机自启
systemctl disable firewalld --now
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
(3)安装 MySQL 8.0 并初始化
# 安装服务
yum install -y mysql-server
# 启动并设置开机自启
systemctl enable mysqld --now
# 登录MySQL设置root密码
mysql
MySQL 命令行内执行:
alter user 'root'@'localhost' identified by '你的root密码';
flush privileges;
exit;
(4)设置系统时区
timedatectl set-timezone Asia/Shanghai
3. 分节点设置主机名
【仅主库 master 执行】
hostnamectl set-hostname master
bash
【仅从库 slave 执行】
hostnamectl set-hostname slave
bash
4. 分节点配置 Chrony 时间同步
【仅主库 master 执行】
# 安装chrony
yum install -y chrony
systemctl enable chronyd --now
# 修改配置文件
vim /etc/chrony.conf
注释默认 pool 行,添加以下内容:
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
allow 192.168.0.0/16
local stratum 10
重启并同步时间:
systemctl restart chronyd
chronyc makestep
【仅从库 slave 执行】
# 安装chrony
yum install -y chrony
systemctl enable chronyd --now
# 修改配置文件
vim /etc/chrony.conf
注释默认 pool 行,添加以下内容:
server master iburst
重启并同步时间:
systemctl restart chronyd
chronyc makestep
二、主库(Master)专属配置步骤
以下所有命令仅在 master 节点执行。
1. 修改主配置文件 /etc/my.cnf
vim /etc/my.cnf
找到 [mysqld] 段,追加以下配置(末尾保留 !includedir):
有关相关核心参数含义可以参考文章首部博主帖子,里面讲解的很详细
[mysqld]
# ========== 主从复制核心参数 ==========
server-id = 4
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
# ========== 性能优化参数 ==========
innodb_buffer_pool_size = 2560M
innodb_buffer_pool_instances = 4
max_connections = 500
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 引入子配置目录(默认已有则保留)
!includedir /etc/my.cnf.d
2. 创建子配置文件 mysql-server.cnf
说明:MySQL 官方 RPM 包默认不自带该文件,需手动创建。
# 确保目录存在
mkdir -p /etc/my.cnf.d
# 创建并编辑子配置
vim /etc/my.cnf.d/mysql-server.cnf
写入内容:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
3. 重启服务并验证配置生效
systemctl restart mysqld
验证核心参数:
mysql -uroot -p'你的root密码' -e "show variables like 'log_bin';"
mysql -uroot -p'你的root密码' -e "show variables like 'server_id';"
mysql -uroot -p'你的root密码' -e "show variables like 'binlog_format';"
预期结果:log_bin = ON、server_id = 4、binlog_format = ROW。
4. 创建复制专用账号
登录 MySQL 命令行:
mysql -uroot -p'你的root密码'
执行 SQL:
create user 'repl'@'slave' identified with mysql_native_password by 'Abc@1234';
grant replication slave on *.* to 'repl'@'slave';
flush privileges;
5. 记录 binlog 状态(从库配置需要)
show master status;
记下输出中的 File(如 mysql-bin.000001)和 Position(如 864),后续从库配置必须使用这两个值。
三、从库(Slave)专属配置步骤
以下所有命令仅在 slave 节点执行。
1. 修改主配置文件 /etc/my.cnf
vim /etc/my.cnf
找到 [mysqld] 段,追加以下配置:
[mysqld]
# ========== 主从复制核心参数 ==========
server-id = 5
relay-log = mysql-relay-bin
read_only = 1
relay_log_recovery = 1
# ========== 并行复制优化 ==========
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 4
# ========== 性能优化参数(与主库一致) ==========
innodb_buffer_pool_size = 2560M
innodb_buffer_pool_instances = 4
max_connections = 500
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 引入子配置目录
!includedir /etc/my.cnf.d
2. 创建子配置文件 mysql-server.cnf
与主库完全一致,手动创建:
mkdir -p /etc/my.cnf.d
vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
3. 重启服务并验证配置生效
systemctl restart mysqld
验证核心参数:
mysql -uroot -p'你的root密码' -e "show variables like 'server_id';"
mysql -uroot -p'你的root密码' -e "show variables like 'read_only';"
预期结果:server_id = 5、read_only = ON。
4. 配置主从复制关联
登录 MySQL 命令行:
mysql -uroot -p'你的root密码'
执行 SQL,填入主库记录的 binlog 文件名和偏移量:
CHANGE MASTER TO
MASTER_HOST='master',
MASTER_USER='repl',
MASTER_PASSWORD='Abc@1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=864;
5. 启动复制线程
start slave;
查看复制状态:
show slave status\G
核心校验标准:
Slave_IO_Running: YesSlave_SQL_Running: YesLast_IO_Error和Last_SQL_Error为空
四、主从同步功能验证
【仅主库 master 执行】写入测试数据
create database cloud;
use cloud;
create table user (id int auto_increment primary key, username varchar(50) not null);
insert into user (username) values ('test_data');
【仅从库 slave 执行】查询验证
use cloud;
select * from user;
能查询到 test_data 记录,则主从复制部署成功。
五、故障标准化排查步骤
第一步:【仅从库执行】检查复制核心状态(必做第一步)
show slave status\G
重点核对 4 个字段:
| 字段 | 正常状态 | 异常方向 |
|---|---|---|
Slave_IO_Running |
Yes |
网络、账号、binlog 文件问题 |
Slave_SQL_Running |
Yes |
数据不一致、SQL 执行报错 |
Last_IO_Error |
空 | IO 线程具体报错信息 |
Last_SQL_Error |
空 | SQL 线程具体报错信息 |
第二步:【仅主库执行】排查主库端问题
当 Slave_IO_Running = No 或主库操作未同步时执行。
- 确认 binlog 已开启
show variables like 'log_bin';
若为 OFF,说明配置未生效,需检查 /etc/my.cnf 并重启 MySQL。
- 确认 server-id 生效
show variables like 'server_id';
值必须非 0,且与从库不重复。
- 检查复制账号权限
show grants for 'repl'@'slave';
必须包含 REPLICATION SLAVE 权限。
- 确认操作已写入 binlog
show master status;
执行写操作后,Position 数值应增长;未增长说明操作被 binlog-ignore-db 规则忽略。
避坑提醒:
binlog-ignore-db基于当前默认数据库判断,若先use mysql再建业务库,操作不会记录 binlog。
第三步:【仅从库执行】排查从库端问题
- 测试主库网络与端口连通性
# 测试3306端口
telnet master 3306
# 用复制账号直连主库
mysql -urepl -p'Abc@1234' -h master -P 3306
连接失败需排查防火墙、主机名解析、账号权限。
- 确认 server-id 不重复
show variables like 'server_id';
必须与主库数值不同。
- 查看中继日志是否生成
ls /var/lib/mysql/mysql-relay-bin*
无文件说明 IO 线程未正常拉取日志。
第四步:数据一致性错误修复
当 Slave_SQL_Running = No 且报错为 1062(主键冲突)、1032(记录不存在)时执行。
新搭建环境推荐方案:
- 主库全量备份数据,记录最新
File和Position; - 从库清空对应数据库,导入主库备份;
- 从库重新执行
CHANGE MASTER TO填入最新位点,再启动复制。
临时应急方案(生产慎用,会导致数据不一致):
stop slave;
set global sql_slave_skip_counter = 1;
start slave;
六、典型问题速查
| 问题现象 | 执行节点 | 解决方向 |
|---|---|---|
/etc/my.cnf.d/mysql-server.cnf 不存在 |
主 + 从 | 官方 RPM 默认不提供,按本文步骤手动创建即可 |
| 主库建库建表,从库无数据 | 先从后主 | 先查从库复制线程状态,再查主库 binlog 是否开启、操作是否被忽略 |
Slave_IO_Running = No |
主 + 从 | 排查网络、端口、账号密码、server-id 重复、binlog 文件过期 |
Slave_SQL_Running = No |
从库 | 查看具体报错,修复数据一致性后重启复制 |
| 同步延迟持续增大 | 从库 | 开启并行复制、优化大事务、提升从库硬件性能 |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)