CentOS 7搭建MySQL主从复制集群的全过程
导读:在实际生产环境中,单个 MySQL 实例存在单点故障和性能瓶颈。本文将以 CentOS 7 为例,手把手教你搭建一套标准的 MySQL 主从复制集群(Master-Slave Replication),实现读写分离与数据热备。全文包含环境准备、安装配置、主从搭建、验证优化等完整步骤,并辅以流程图与操作示意图,助你快速落地高可用架构。
1. 集群架构概览
MySQL 主从复制是一种异步复制机制,主库(Master)记录所有写操作到二进制日志(binlog),从库(Slave)通过 I/O 线程拉取日志并重放,从而实现数据同步。

架构优势:
- 读写分离,提升读并发能力
- 数据实时备份,主库故障可快速切换
- 支持在线备份(从库备份不影响主库)
2. 环境准备
| 主机名 | IP 地址 | 角色 | 操作系统 |
|---|---|---|---|
| db-master | 192.168.1.10 | Master | CentOS 7.9 |
| db-slave1 | 192.168.1.11 | Slave | CentOS 7.9 |
注意:所有节点需关闭防火墙或开放 3306 端口,并配置好主机名解析(
/etc/hosts)。
3. 安装 MySQL(使用 Yum 源,避免编译)
传统编译方式(./configure && make && make install)耗时且易出错,强烈推荐使用官方 Yum 源。
3.1 添加 MySQL Yum 源
在两台节点上分别执行:
# 下载 MySQL 8.0 官方源(也可选择 5.7) wget https://repo.mysql.com//mysql80-community-release-el7-11.noarch.rpm rpm -ivh mysql80-community-release-el7-11.noarch.rpm # 更新 yum 缓存 yum clean all yum makecache
3.2 安装 MySQL Server
yum install -y mysql-community-server
3.3 启动并初始化
# 启动 MySQL 服务 systemctl start mysqld systemctl enable mysqld # 查看临时密码(MySQL 8.0 默认生成) grep 'temporary password' /var/log/mysqld.log
输出示例:2025-05-22T06:35:12.123456Z 1 [Note] A temporary password is generated for root@localhost: >kL9#xW?rQ2i
3.4 安全配置(修改密码)
mysql -uroot -p # 输入临时密码后执行: ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPwd123!'; FLUSH PRIVILEGES;
密码强度要求:至少 8 位,包含大小写字母、数字和特殊字符。
4. 配置主从复制
4.1 主库配置(Master)
编辑 /etc/my.cnf,在 [mysqld] 段添加以下内容:
[mysqld] # 服务器 ID(主从各节点必须唯一) server-id = 1 # 开启二进制日志 log-bin = mysql-bin # 需要复制的数据库(可选,默认所有) # binlog-do-db = exampledb # 忽略复制的数据库 # binlog-ignore-db = mysql # 二进制日志格式(推荐 ROW) binlog_format = ROW # 确保行镜像完整 binlog_row_image = FULL # 过期日志清理(保留 7 天) expire_logs_days = 7
重启主库:
systemctl restart mysqld
登录主库,创建复制专用用户:
CREATE USER 'replica'@'%' IDENTIFIED BY 'ReplicaPass123!'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
查看主库状态(记录 File 和 Position):
SHOW MASTER STATUS;
输出示例:
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 157 | | | +------------------+----------+--------------+------------------+
4.2 从库配置(Slave)
编辑 /etc/my.cnf:
[mysqld] server-id = 2 # 开启中继日志 relay-log = mysql-relay-bin # 只读模式(可选) read_only = 1 # 禁止从库执行写操作(超级用户除外) super_read_only = 1
重启从库:
systemctl restart mysqld
在从库上执行同步配置(替换 MASTER_LOG_FILE 和 MASTER_LOG_POS 为主库查询到的值):
CHANGE MASTER TO MASTER_HOST = '192.168.1.10', MASTER_USER = 'replica', MASTER_PASSWORD = 'ReplicaPass123!', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 157;
启动从库复制线程:
START SLAVE;
检查同步状态:
SHOW SLAVE STATUS\G
重点关注以下两个字段应为 Yes:
Slave_IO_Running: YesSlave_SQL_Running: Yes
5. 验证主从复制
5.1 在主库创建测试数据
CREATE DATABASE testdb; USE testdb; CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO t1 VALUES (1, 'Master Data');
5.2 在从库查询
USE testdb; SELECT * FROM t1;
如果能看到相同数据,说明主从同步成功。
6. 常见问题与排障
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
Slave_IO_Running: Connecting | 网络不通 / 用户权限错误 | 检查防火墙、MySQL 端口、复制用户权限 |
Slave_SQL_Running: No | SQL 语句执行冲突(如主键重复) | 查看 Last_Error 字段,跳过或修复数据 |
| 主从延迟大 | 从库硬件差 / 大事务 | 开启并行复制(slave_parallel_workers) |
跳过错误示例(谨慎使用):
STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
7. 操作流程图

8. 高可用延伸:MHA / InnoDB Cluster
主从复制虽然实现了数据同步,但故障转移仍需人工介入。生产环境可考虑:
- MHA(Master High Availability):自动监控并切换主库。
- MySQL Group Replication(MGR):内置的分布式复制机制,提供强一致性。
- MySQL InnoDB Cluster:基于 MGR + MySQL Router 的官方高可用方案。
后续文章将详细讲解这些高级架构。
9. 总结
本文摒弃了过时的源码编译方式,采用官方 Yum 源在 CentOS 7 上快速搭建 MySQL 主从复制集群,并提供了完整的验证步骤与排障指南。通过该架构,你可以轻松实现读写分离和数据备份,为业务系统提供更稳定的数据库服务。
关键点回顾:
- ✅ 主从核心:二进制日志(binlog) + 中继日志(relay log)
- ✅ 必须配置唯一的
server-id - ✅ 从库
read_only防止误写 - ✅ 定期监控
SHOW SLAVE STATUS
以上就是CentOS 7搭建MySQL主从复制集群的全过程的详细内容,更多关于CentOS 7搭建MySQL主从复制集群的资料请关注脚本之家其它相关文章!
相关文章
基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析
本篇文章是对Mysql的IP处理函数inet_aton()与inet_ntoa()进行了详细的分析介绍,需要的朋友参考下2013-06-06
Mysql 8.4.0 结合 Docker 搭建GTID主从复制及传统主从复制详解
这篇文章主要介绍了Mysql 8.4.0 结合 Docker 搭建GTID主从复制,以及传统主从复制,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2024-06-06
小型Drupal数据库备份以及大型站点MySQL备份策略分享
为了防止web服务器出现故障而引起的数据丢失,数据库备份显得非常重要,以免出现重大损失。本文分析研究一下小型的Drupal站的备份策略以及大型站点的mysql备份策略2014-11-11


最新评论