openEuler MySQL 8.0 主从复制部署与排错步骤
2026/7/19 3:04:23 网站建设 项目流程

openEuler MySQL 8.0 主从复制部署与排查步骤


参考博客:https://www.cnblogs.com/gxl2004/p/19931158

一、前置环境准备

1. 节点规划

节点角色主机名IP 地址
主库 Mastermaster192.168.10.229
从库 Slaveslave192.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 = ONserver_id = 4binlog_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 = 5read_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: Yes
  • Slave_SQL_Running: Yes
  • Last_IO_ErrorLast_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_RunningYes网络、账号、binlog 文件问题
Slave_SQL_RunningYes数据不一致、SQL 执行报错
Last_IO_ErrorIO 线程具体报错信息
Last_SQL_ErrorSQL 线程具体报错信息

第二步:【仅主库执行】排查主库端问题

Slave_IO_Running = No或主库操作未同步时执行。

  1. 确认 binlog 已开启
show variables like 'log_bin';

若为OFF,说明配置未生效,需检查/etc/my.cnf并重启 MySQL。

  1. 确认 server-id 生效
show variables like 'server_id';

值必须非 0,且与从库不重复。

  1. 检查复制账号权限
show grants for 'repl'@'slave';

必须包含REPLICATION SLAVE权限。

  1. 确认操作已写入 binlog
show master status;

执行写操作后,Position数值应增长;未增长说明操作被binlog-ignore-db规则忽略。

避坑提醒:binlog-ignore-db基于当前默认数据库判断,若先use mysql再建业务库,操作不会记录 binlog。


第三步:【仅从库执行】排查从库端问题

  1. 测试主库网络与端口连通性
# 测试3306端口 telnet master 3306 # 用复制账号直连主库 mysql -urepl -p'Abc@1234' -h master -P 3306

连接失败需排查防火墙、主机名解析、账号权限。

  1. 确认 server-id 不重复
show variables like 'server_id';

必须与主库数值不同。

  1. 查看中继日志是否生成
ls /var/lib/mysql/mysql-relay-bin*

无文件说明 IO 线程未正常拉取日志。


第四步:数据一致性错误修复

Slave_SQL_Running = No且报错为 1062(主键冲突)、1032(记录不存在)时执行。

新搭建环境推荐方案

  1. 主库全量备份数据,记录最新FilePosition
  2. 从库清空对应数据库,导入主库备份;
  3. 从库重新执行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从库查看具体报错,修复数据一致性后重启复制
同步延迟持续增大从库开启并行复制、优化大事务、提升从库硬件性能

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询