MySQL主从复制技术能有效解决单点故障问题,本文详解CentOS7环境下搭建高可用集群的全流程,涵盖环境配置、主从同步、故障排查等关键步骤。
MySQL主从复制采用异步机制,主库通过二进制日志记录写操作,从库则通过I/O线程获取并重放这些日志,最终实现数据同步。

架构优势:
| 主机名 | IP 地址 | 角色 | 操作系统 |
|---|---|---|---|
| db-master | 192.168.1.10 | Master | CentOS 7.9 |
| db-slave1 | 192.168.1.11 | Slave | CentOS 7.9 |
注意:所有节点需关闭防火墙或开放 3306 端口,并配置好主机名解析(
/etc/hosts)。
传统编译方式耗时且易出错,使用官方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
yum install -y mysql-community-server
# 启动 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
mysql -uroot -p # 输入临时密码后执行: ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPwd123!'; FLUSH PRIVILEGES;
密码强度要求:至少 8 位,包含大小写字母、数字和特殊字符。
编辑 /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 | | | +------------------+----------+--------------+------------------+
编辑 /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 STATUSG
重点关注以下两个字段应为 Yes:
Slave_IO_Running: YesSlave_SQL_Running: YesCREATE DATABASE testdb; USE testdb; CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO t1 VALUES (1, 'Master Data');
USE testdb; SELECT * FROM t1;
如果能看到相同数据,说明主从同步成功。