《华为云ECS自建MySQL主从复制实战:从配置到验证全流程详解》
在业务发展过程中,单机数据库往往难以满足高可用和读写分离的需求。本文基于华为云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是否限制了访问 - 复制账户密码是否正确
七、安全加固建议
- 安全组最小化开放:从库到主库的3306端口仅对从库内网IP放通,不对公网开放
- 复制账户权限最小化:只授予 REPLICATION SLAVE 权限,不要授予更多权限
- 定期备份:即使有主从架构,也要通过华为云CBR服务对ECS做系统盘备份,防止误操作导致数据丢失
- 监控告警:利用华为云CES监控ECS的CPU、内存、磁盘IO,主从延迟过大时及时告警
八、总结
本文完整演示了在华为云ECS上搭建MySQL主从复制的全过程。核心要点回顾:
- 两台ECS放同一VPC走内网通信,安全且免公网费用
- 开启GTID模式,比传统位点复制更可靠
- 从库设置只读防止误写
- 搭建完成后务必做数据同步验证
- 安全组仅放通内网3306端口,遵循最小权限原则
主从复制是数据库高可用的基础,在此基础上还可以进一步搭建KeepAlived加双主模式实现自动故障切换,或者引入ProxySQL实现读写分离,这些将在后续文章中展开。
- 点赞
- 收藏
- 关注作者
评论(0)