CentOS 7 搭建 MySQL 主从复制集群:从零到生产级高可用

CentOS 7 搭建 MySQL 主从复制集群:从零到生产级高可用 CentOS 7 搭建 MySQL 主从复制集群从零到生产级高可用导读在实际生产环境中单个 MySQL 实例存在单点故障和性能瓶颈。本文将以 CentOS 7 为例手把手教你搭建一套标准的MySQL 主从复制集群Master-Slave Replication实现读写分离与数据热备。全文包含环境准备、安装配置、主从搭建、验证优化等完整步骤并辅以流程图与操作示意图助你快速落地高可用架构。1. 集群架构概览MySQL 主从复制是一种异步复制机制主库Master记录所有写操作到二进制日志binlog从库Slave通过 I/O 线程拉取日志并重放从而实现数据同步。写操作读操作读操作binlog 发送binlog 发送中继日志中继日志客户端MasterSlave1Slave2SQL 线程重放SQL 线程重放架构优势读写分离提升读并发能力数据实时备份主库故障可快速切换支持在线备份从库备份不影响主库2. 环境准备主机名IP 地址角色操作系统db-master192.168.1.10MasterCentOS 7.9db-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.7wgethttps://repo.mysql.com//mysql80-community-release-el7-11.noarch.rpmrpm-ivhmysql80-community-release-el7-11.noarch.rpm# 更新 yum 缓存yum clean all yum makecache3.2 安装 MySQL Serveryuminstall-ymysql-community-server3.3 启动并初始化# 启动 MySQL 服务systemctl start mysqld systemctlenablemysqld# 查看临时密码MySQL 8.0 默认生成greptemporary password/var/log/mysqld.log输出示例2025-05-22T06:35:12.123456Z 1 [Note] A temporary password is generated for rootlocalhost: kL9#xW?rQ2i3.4 安全配置修改密码mysql-uroot-p# 输入临时密码后执行ALTERUSERrootlocalhostIDENTIFIED BYYourStrongPwd123!;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登录主库创建复制专用用户CREATEUSERreplica%IDENTIFIEDBYReplicaPass123!;GRANTREPLICATIONSLAVEON*.*TOreplica%;FLUSHPRIVILEGES;查看主库状态记录 File 和 PositionSHOWMASTERSTATUS;输出示例------------------------------------------------------------ | 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 MASTERTOMASTER_HOST192.168.1.10,MASTER_USERreplica,MASTER_PASSWORDReplicaPass123!,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS157;启动从库复制线程STARTSLAVE;检查同步状态SHOWSLAVESTATUS\G重点关注以下两个字段应为YesSlave_IO_Running: YesSlave_SQL_Running: Yes5. 验证主从复制5.1 在主库创建测试数据CREATEDATABASEtestdb;USEtestdb;CREATETABLEt1(idINTPRIMARYKEY,nameVARCHAR(20));INSERTINTOt1VALUES(1,Master Data);5.2 在从库查询USEtestdb;SELECT*FROMt1;如果能看到相同数据说明主从同步成功。6. 常见问题与排障问题现象可能原因解决方法Slave_IO_Running: Connecting网络不通 / 用户权限错误检查防火墙、MySQL 端口、复制用户权限Slave_SQL_Running: NoSQL 语句执行冲突如主键重复查看Last_Error字段跳过或修复数据主从延迟大从库硬件差 / 大事务开启并行复制slave_parallel_workers跳过错误示例谨慎使用STOP SLAVE;SETGLOBALSQL_SLAVE_SKIP_COUNTER1;STARTSLAVE;7. 操作流程图环境准备两台 CentOS 7网络互通/etc/hosts 配置yum 安装 MySQL官方源启动 mysqld获取临时密码修改 root 密码主库配置 server-id1开启 log-bin主库创建复制用户 replica主库SHOW MASTER STATUS记录 File Position从库配置 server-id2开启 relay-log 和 read_only从库CHANGE MASTER TO指定主库信息从库START SLAVE从库SHOW SLAVE STATUS检查 IO/SQL 线程为 Yes测试主库插入数据从库查询验证8. 高可用延伸MHA / InnoDB Cluster主从复制虽然实现了数据同步但故障转移仍需人工介入。生产环境可考虑MHAMaster High Availability自动监控并切换主库。MySQL Group ReplicationMGR内置的分布式复制机制提供强一致性。MySQL InnoDB Cluster基于 MGR MySQL Router 的官方高可用方案。后续文章将详细讲解这些高级架构。9. 总结本文摒弃了过时的源码编译方式采用官方 Yum 源在 CentOS 7 上快速搭建 MySQL 主从复制集群并提供了完整的验证步骤与排障指南。通过该架构你可以轻松实现读写分离和数据备份为业务系统提供更稳定的数据库服务。关键点回顾✅ 主从核心二进制日志binlog 中继日志relay log✅ 必须配置唯一的server-id✅ 从库read_only防止误写✅ 定期监控SHOW SLAVE STATUS如果你在搭建过程中遇到任何问题欢迎在评论区留言交流下个问题MySQL Group Replication 原理与实战——从主从复制到多主模式的进化。