《华为云ECS自建MySQL主从复制实战:从配置到验证全流程详解》

举报
yd_243668775 发表于 2026/11/01 20:17:32 2026/11/01
【摘要】 在业务发展过程中,单机数据库往往难以满足高可用和读写分离的需求。本文基于华为云ECS实例,从零开始搭建MySQL主从复制架构,涵盖环境准备、主库配置、从库配置、数据同步验证以及常见问题排查,帮助开发者快速掌握这一经典的高可用数据库方案。一、架构规划本次实战的架构如下:主库(Master):华为云ECS,CentOS 7.9,MySQL 8.0,负责写入和更新操作从库(Slave):华为云EC...

在业务发展过程中,单机数据库往往难以满足高可用和读写分离的需求。本文基于华为云ECS实例,从零开始搭建MySQL主从复制架构,涵盖环境准备、主库配置、从库配置、数据同步验证以及常见问题排查,帮助开发者快速掌握这一经典的高可用数据库方案。

一、架构规划

本次实战的架构如下:

  • 主库(Master):华为云ECS,CentOS 7.9,MySQL 8.0,负责写入和更新操作
  • 从库(Slave):华为云ECS,CentOS 7.9,MySQL 8.0,负责读操作,自动同步主库数据
  • 网络:两台ECS位于同一VPC同一子网内,内网互通,延迟极低

选型说明:两台ECS放在同一VPC内,走内网通信,既安全又免去了公网带宽费用。建议选择通用计算型实例(如s6.large.2),2核4G足以支撑中小规模业务的主从同步。

二、环境准备

2.1 安装MySQL

在主库和从库上分别执行以下操作。首先添加MySQL 8.0的yum源,可通过MySQL官方提供的rpm包安装,在终端执行rpm安装命令将MySQL社区版yum源添加到系统中。然后安装MySQL服务并启动:

# 安装MySQL服务
yum install mysql-community-server -y

# 启动并设置开机自启
systemctl start mysqld
systemctl enable mysqld

2.2 获取初始密码并修改

# 获取临时密码
grep 'temporary password' /var/log/mysqld.log

# 使用临时密码登录后修改密码
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPwd@2024';

注意:MySQL 8.0默认密码策略要求大小写字母、数字和特殊字符的组合,长度不少于8位。

三、主库(Master)配置

3.1 修改配置文件

编辑 /etc/my.cnf,在 [mysqld] 段下添加:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON

参数说明:

  • server-id:集群中每个节点的唯一标识,主从不能重复
  • log-bin:开启二进制日志,这是主从复制的基础
  • binlog-format = ROW:基于行的复制,数据一致性最好
  • gtid-mode:开启GTID(全局事务标识),比传统的基于位点的复制更可靠,自动定位同步位置,避免位点错位问题

重启MySQL使配置生效:

systemctl restart mysqld

3.2 创建复制账户

登录主库MySQL,创建一个专门用于复制的账户:

CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplPwd@2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

3.3 查看主库状态

SHOW MASTER STATUS;

记录下输出的 File 和 Position 值,从库配置时需要用到。如果开启了GTID,则关注 Executed_Gtid_Set 的值。

四、从库(Slave)配置

4.1 修改配置文件

编辑从库的 /etc/my.cnf:

[mysqld]
server-id = 2
log-bin = mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON
relay-log = relay-bin
read-only = ON

与主库的区别:

  • server-id 改为2,确保唯一
  • relay-log:中继日志,从库用来暂存从主库拉取的binlog事件
  • read-only = ON:从库设为只读,防止误写导致数据不一致(root用户和有SUPER权限的用户不受此限制)

重启MySQL:

systemctl restart mysqld

4.2 配置主从关系

登录从库MySQL,执行:

-- 使用GTID方式配置(推荐)
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST = '192.168.0.10',
  SOURCE_PORT = 3306,
  SOURCE_USER = 'repl',
  SOURCE_PASSWORD = 'ReplPwd@2024',
  SOURCE_AUTO_POSITION = 1;

-- 启动复制
START REPLICA;

说明:MySQL 8.0中 CHANGE MASTER TO 已更名为 CHANGE REPLICATION SOURCE TO,START SLAVE 更名为 START REPLICA,旧语法仍然兼容。上面 SOURCE_HOST 请替换为主库的实际内网IP。

五、验证主从同步

5.1 查看从库复制状态

在从库执行:

SHOW REPLICA STATUS\G

重点关注以下两个字段:

Replica_IO_Running: Yes
Replica_SQL_Running: Yes

两个都为 Yes 表示主从复制正常运行。如果任一个为 No,需要查看 Last_IO_Error 或 Last_SQL_Error 字段排查原因。

5.2 数据同步测试

在主库创建测试数据库和表:

CREATE DATABASE test_repl;
USE test_repl;
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (name) VALUES ('张三'), ('李四'), ('王五');

在从库验证数据是否同步:

USE test_repl;
SELECT * FROM users;

如果从库能查询到刚才插入的三条记录,说明主从复制搭建成功。

六、常见问题排查

问题1:IO线程报错认证插件不兼容

MySQL 8.0默认使用 caching_sha2_password 认证插件,部分场景下复制连接会失败。解决方法是在主库将复制用户改为传统认证方式:

ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'ReplPwd@2024';

问题2:从库数据滞后严重

可能原因及排查思路:

  • 主库大事务导致binlog积压,检查主库是否有未提交的长事务
  • 从库单线程回放,可通过设置 replica_parallel_workers 开启多线程复制
  • 网络带宽不足,检查ECS内网带宽配额

问题3:从库无法连接主库

检查清单:

  • 两台ECS是否在同一VPC,安全组是否放通了3306端口
  • 主库的 bind-address 是否限制了访问
  • 复制账户密码是否正确

七、安全加固建议

  1. 安全组最小化开放:从库到主库的3306端口仅对从库内网IP放通,不对公网开放
  2. 复制账户权限最小化:只授予 REPLICATION SLAVE 权限,不要授予更多权限
  3. 定期备份:即使有主从架构,也要通过华为云CBR服务对ECS做系统盘备份,防止误操作导致数据丢失
  4. 监控告警:利用华为云CES监控ECS的CPU、内存、磁盘IO,主从延迟过大时及时告警

八、总结

本文完整演示了在华为云ECS上搭建MySQL主从复制的全过程。核心要点回顾:

  • 两台ECS放同一VPC走内网通信,安全且免公网费用
  • 开启GTID模式,比传统位点复制更可靠
  • 从库设置只读防止误写
  • 搭建完成后务必做数据同步验证
  • 安全组仅放通内网3306端口,遵循最小权限原则

主从复制是数据库高可用的基础,在此基础上还可以进一步搭建KeepAlived加双主模式实现自动故障切换,或者引入ProxySQL实现读写分离,这些将在后续文章中展开。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。