CentOS 7搭建MySQL主从复制集群的全过程

 更新时间:2026年05月22日 09:19:59   作者:身如柳絮随风扬  
在实际生产环境中,单个 MySQL 实例存在单点故障和性能瓶颈,本文将以 CentOS 7 为例,手把手教你搭建一套标准的 MySQL 主从复制集群(Master-Slave Replication),实现读写分离与数据热备,需要的朋友可以参考下

导读:在实际生产环境中,单个 MySQL 实例存在单点故障和性能瓶颈。本文将以 CentOS 7 为例,手把手教你搭建一套标准的 MySQL 主从复制集群(Master-Slave Replication),实现读写分离与数据热备。全文包含环境准备、安装配置、主从搭建、验证优化等完整步骤,并辅以流程图与操作示意图,助你快速落地高可用架构。

1. 集群架构概览

MySQL 主从复制是一种异步复制机制,主库(Master)记录所有写操作到二进制日志(binlog),从库(Slave)通过 I/O 线程拉取日志并重放,从而实现数据同步。

架构优势

  • 读写分离,提升读并发能力
  • 数据实时备份,主库故障可快速切换
  • 支持在线备份(从库备份不影响主库)

2. 环境准备

主机名IP 地址角色操作系统
db-master192.168.1.10MasterCentOS 7.9
db-slave1192.168.1.11SlaveCentOS 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_FILEMASTER_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: Yes
  • Slave_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: NoSQL 语句执行冲突(如主键重复)查看 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主从复制集群的资料请关注脚本之家其它相关文章!

相关文章

  • sql中替换函数replace()用法与实例总结

    sql中替换函数replace()用法与实例总结

    这篇文章主要给大家介绍了关于sql中替换函数replace()用法与实例的相关资料,在SQL中REPLACE函数用于替换一个字符串中的一部分为另一个字符串,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • MySQL慢查询优化之慢查询日志分析的实例教程

    MySQL慢查询优化之慢查询日志分析的实例教程

    这篇文章主要介绍了MySQL慢查询日志分析的实例教程,通过设置参数从慢查询日志开始分析性能问题的原因,需要的朋友可以参考下
    2015-11-11
  • MySQL InnoDB中意向锁的作用及原理

    MySQL InnoDB中意向锁的作用及原理

    意向锁是由InnoDB在操作数据之前自动加的,本文主要介绍了MySQL InnoDB中意向锁的作用及原理,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • MySQL中如何查询某年某月的数据

    MySQL中如何查询某年某月的数据

    这篇文章主要介绍了MySQL中如何查询某年某月的数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • MySQL如何快速的创建千万级测试数据

    MySQL如何快速的创建千万级测试数据

    这篇文章主要给大家介绍了关于MySQL如何快速的创建千万级测试数据的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析

    基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析

    本篇文章是对Mysql的IP处理函数inet_aton()与inet_ntoa()进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 深入理解mysql各种锁

    深入理解mysql各种锁

    大家好,本篇文章主要讲的是深入理解mysql各种锁,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 从零开始搭建MySQL MMM架构

    从零开始搭建MySQL MMM架构

    这篇文章主要介绍了从零开始搭建MySQL MMM架构,本文讲解了配置MySQL Relication、新建同步数据库需要的用户、同步主从数据库、安装MMM、配置MMM、启动MMM等问题,需要的朋友可以参考下
    2015-04-04
  • Mysql 8.4.0 结合 Docker 搭建GTID主从复制及传统主从复制详解

    Mysql 8.4.0 结合 Docker 搭建GTID主从复制及传统主从复制详解

    这篇文章主要介绍了Mysql 8.4.0 结合 Docker 搭建GTID主从复制,以及传统主从复制,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-06-06
  • 小型Drupal数据库备份以及大型站点MySQL备份策略分享

    小型Drupal数据库备份以及大型站点MySQL备份策略分享

    为了防止web服务器出现故障而引起的数据丢失,数据库备份显得非常重要,以免出现重大损失。本文分析研究一下小型的Drupal站的备份策略以及大型站点的mysql备份策略
    2014-11-11

最新评论