mysql主从复制是数据库领域常用的数据同步机制,其核心逻辑是主库将写操作记录到二进制日志中,从库通过IO线程拉取主库的二进制日志并保存到本地的中继日志,再由SQL线程回放中继日志完成数据同步。很多用户在使用该方案时会关心,mysql主从复制是否支持多个从库,答案是肯定的,mysql原生主从复制天然支持一主多从的架构,可以同时挂载多个从库节点。

mysql多从库的核心优势
配置多个从库可以带来多方面的收益,首先是读请求分流,主库只需要处理写请求,所有的读请求可以分配到多个从库上,大幅提升系统的整体读吞吐量。其次多从库可以实现数据冗余,即使单个从库出现故障,其他从库仍然可以提供服务,降低数据丢失的风险。另外多从库也方便做业务拆分,不同的从库可以承载不同业务线的读请求,避免业务之间的相互影响。
多从库完整配置步骤
1. 主库配置调整
首先需要修改主库的配置文件,开启二进制日志并设置唯一的server-id,server-id是主从节点的唯一标识,所有节点的server-id不能重复。修改完成后重启主库服务。
[mysqld] # 开启二进制日志 log-bin=mysql-bin # 设置server-id,主库可以设置为1 server-id=1 # 设置二进制日志格式为行模式,同步数据更可靠 binlog_format=ROW # 可选:指定需要同步的数据库,不设置则同步所有数据库 # binlog-do-db=test_db
重启主库后,登录主库执行命令创建用于从库同步的账号,并授予对应的权限:
-- 创建同步账号,密码设置为slave_pass,允许所有IP的从库连接,实际生产环境建议限制从库IP CREATE USER 'slave_user'@'%' IDENTIFIED BY 'slave_pass'; -- 授予同步权限 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave_user'@'%'; -- 刷新权限 FLUSH PRIVILEGES; -- 查看主库当前的二进制日志状态,记录File和Position的值,后续从库配置需要用到 SHOW MASTER STATUS;
2. 从库1配置
修改第一个从库的配置文件,设置唯一的server-id,关闭二进制日志(如果不需要从库再挂载从库可以不用开启),然后重启从库服务。
[mysqld] # 从库1的server-id设置为2,不能和主库以及其他从库重复 server-id=2 # 可选:开启只读模式,避免从库被误写入数据 read-only=1
重启后登录从库1,执行同步配置命令,将主库的IP、同步账号、二进制日志信息替换为实际的值:
-- 停止从库同步进程 STOP SLAVE; -- 配置主库连接信息 CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_pass', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', -- 替换为主库SHOW MASTER STATUS返回的File值 MASTER_LOG_POS=154; -- 替换为主库SHOW MASTER STATUS返回的Position值 -- 启动从库同步进程 START SLAVE; -- 查看同步状态,确认Slave_IO_Running和Slave_SQL_Running都是Yes SHOW SLAVE STATUSG
3. 从库2及更多从库配置
第二个从库的配置流程和从库1基本一致,只需要修改配置文件中的server-id为其他唯一值,比如设置为3,然后重复从库1的配置步骤即可,多个从库都按照这个方式依次添加,只要保证每个从库的server-id不重复,都可以正常连接到主库完成同步。
[mysqld] # 从库2的server-id设置为3 server-id=3 read-only=1
多从库配置常见问题与解决
1. 从库IO线程运行报错
如果从库状态中Slave_IO_Running为No,通常是主库连接信息错误或者网络不通导致的。可以先检查主库IP、端口、同步账号密码是否正确,然后测试从库能否连通主库端口,也可以查看从库的错误日志定位具体原因。如果是主库二进制日志信息变更导致的,需要重新获取主库的File和Position值,重新执行CHANGE MASTER TO命令。
2. 从库SQL线程运行报错
Slave_SQL_Running为No一般是因为从库回放中继日志时出现了错误,比如从库已经存在同名的数据库或者表,主库的写操作在从库执行时冲突。如果是测试环境,可以先停止同步,重置从库状态后重新配置;如果是生产环境,需要分析错误日志中的具体SQL,手动处理后重启同步进程。
3. 多个从库同步延迟不一致
不同从库的同步延迟可能不同,这和从库服务器的性能、主库的写操作量有关。可以通过优化从库服务器配置、提升从库硬件性能、控制主库大事务的产生等方式降低同步延迟,也可以在业务层做读请求分配时,优先选择同步延迟更小的从库。
多从库使用注意事项
- 所有节点的server-id必须唯一,重复会导致同步异常
- 主库的二进制日志不要随意删除,否则从库可能无法继续同步
- 从库默认是异步同步,主库写操作提交后不会等待从库同步完成,如果需要更强的数据一致性,可以考虑使用半同步复制
- 如果需要对从库做备份操作,建议在从库同步正常的时候进行,避免备份到不一致的数据