mysql主从复制的多从架构是指一个主库对应多个从库的部署模式,主库负责处理写请求,所有从库同步主库的数据变更,分担读请求压力,是中小型业务常用的数据库扩展方案。这种架构既能实现读写分离,也能在主库故障时快速切换从库保障服务可用性。

多从架构前置准备
搭建前需要准备至少三台服务器,一台作为主库,另外两台作为从库,所有服务器安装相同版本的mysql,建议版本不低于5.7,避免低版本兼容性问题。同时保证三台服务器之间网络互通,防火墙开放mysql默认端口3306。
主库配置步骤
首先修改主库的mysql配置文件,通常路径为/etc/my.cnf或者/etc/mysql/my.cnf,添加以下配置项:
[mysqld] # 设置服务器唯一ID,主从库ID不能重复 server-id=1 # 开启二进制日志,主库必须开启,从库通过同步binlog实现数据复制 log-bin=mysql-bin # 可选配置,指定需要同步的数据库,不配置则同步所有库 binlog-do-db=test_db # 可选配置,忽略同步的数据库 binlog-ignore-db=mysql
修改配置后重启mysql服务,然后登录主库执行以下命令创建用于同步的账号,并授予复制权限:
-- 创建同步账号,密码为repl_password,允许所有从库IP连接 CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password'; -- 授予复制权限 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- 刷新权限 FLUSH PRIVILEGES; -- 查看主库状态,记录File和Position的值,后续从库配置需要用到 SHOW MASTER STATUS;
执行SHOW MASTER STATUS后会得到类似如下结果,需要记录File列的值mysql-bin.000001和Position列的值154:
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
|---|---|---|---|
| mysql-bin.000001 | 154 | test_db | mysql |
从库配置步骤
两个从库的配置流程完全一致,仅server-id需要设置为不同的值,比如第一个从库设置为2,第二个从库设置为3。修改从库配置文件添加以下配置:
[mysqld] # 从库1设置为2,从库2设置为3,所有实例ID不能重复 server-id=2 # 可选配置,开启中继日志,从库同步的临时日志 relay-log=mysql-relay # 可选配置,从库只读,避免误写数据 read-only=1
重启从库mysql服务后,登录从库执行以下命令配置主库连接信息,注意替换其中的主库IP、同步账号密码、以及之前记录的File和Position值:
-- 配置主库连接信息 CHANGE MASTER TO MASTER_HOST='主库IP地址', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; -- 启动从库同步进程 START SLAVE; -- 查看从库同步状态 SHOW SLAVE STATUSG
查看同步状态时,重点关注Slave_IO_Running和Slave_SQL_Running两个字段,两者都为Yes说明同步配置成功。
多从架构验证示例
在主库执行写操作,验证两个从库是否能同步数据:
-- 主库执行
USE test_db;
CREATE TABLE user_info (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
INSERT INTO user_info (name, age) VALUES ('张三', 25);
分别在两个从库执行查询,能看到刚插入的数据说明多从复制配置生效:
-- 两个从库分别执行 USE test_db; SELECT * FROM user_info;
多从架构注意事项
- 主库的
server-id必须全局唯一,所有从库的server-id也不能重复,否则会导致同步异常 - 主库同步账号的权限只需要
REPLICATION SLAVE即可,不要授予多余权限,避免安全风险 - 从库建议开启
read-only配置,避免业务误写从库导致主从数据不一致 - 如果主库数据量较大,初始搭建时可以先对主库做全量备份,恢复到从库后再开启同步,减少同步初始化时间
- 定期监控主从同步状态,出现
Slave_IO_Running或Slave_SQL_Running不为Yes的情况需要及时排查修复