MySQL主从复制配置全流程:从零搭建到状态验证

MySQL主从复制配置的核心,是让主库把数据变更写进二进制日志(binlog),从库读取这些日志并在本地重放,从而保持数据一致。
下面按主库配置、从库配置、建立复制连接、状态验证四步展开,假设你已装好两台MySQL,版本一致或从库版本不低于主库。

先确认环境与前提条件

开始前先核对三件事,能避免大部分复制失败:

  • 两台服务器能互相ping通,从库能访问主库的3306端口。
  • 主从MySQL的大版本尽量一致,比如都是MySQL 8.0,避免语法和认证插件不兼容。
  • 主库已有数据量不大,或你愿意先锁表导出;数据量大的场景建议用mysqldump或XtraBackup做一次全量同步。

检查主库当前是否已开启binlog:

SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE 'server_id';

如果log_bin是OFF,就需要修改配置文件并重启MySQL。

主库:开启binlog并创建复制账号

编辑MySQL配置文件,Linux下通常是/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]段落下加入:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
expire_logs_days=7

说明:server-id在复制拓扑里必须唯一,主库设为1,从库不能再用1。binlog-format=ROW是推荐格式,能减少主从数据不一致。
改完重启MySQL:

systemctl restart mysqld

重启后登录主库,创建专门用于复制的账号,不要直接用root:

CREATE USER 'repl'@'%' IDENTIFIED BY '你的强密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

如果只允许从库IP连接,把%换成从库的实际IP更安全。
接着记录主库当前日志位置,后续从库要用:

SHOW MASTER STATUS;

记下File和Position两列的值。
如果启用了GTID,则记下Executed_Gtid_Set。

从库:设置server-id并指向主库

从库的配置文件同样在[mysqld]段落下设置,server-id给一个和主库不同的值:

[mysqld]
server-id=2
relay-log=relay-bin
read-only=1

read-only=1让从库普通账号只能读,防止误写导致数据分叉;
有super权限的账号仍可写,这是预期行为。
重启从库后,执行复制指向命令。

使用日志位置方式:

CHANGE MASTER TO
  MASTER_HOST='主库IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='你的强密码',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;

如果主库开启了GTID,用GTID方式更省事,不用记日志文件名:

CHANGE MASTER TO
  MASTER_HOST='主库IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='你的强密码',
  MASTER_AUTO_POSITION=1;

然后启动复制:

START SLAVE;

MySQL 8.0.22以后也可以用START REPLICA;,两者等价。

用SHOW SLAVE STATUS判断是否真的同步

启动后立刻查看状态:

SHOW SLAVE STATUS\G

关键看三项:

  • Slave_IO_Running和Slave_SQL_Running都必须是Yes。
  • Seconds_Behind_Master为0或很小,说明延迟低。
  • Last_Error为空,有内容就说明出错。

验证同步效果最直接的办法:在主库建一个测试库或表,插入一行数据,再到从库查询是否出现。
能查到说明复制链路已经通了。

常见报错与避坑要点

IO线程连不上主库:多半是复制账号密码错、防火墙没放行3306、或主库没授权从库IP。
先在从库用mysql -h主库IP -urepl -p手动登录试一次。

server-id重复:两台都设成1,复制会报错或行为异常,务必保证唯一。

从库已存在同名数据:如果从库不是空库,重放日志会报主键冲突。
正确做法是先做主库全量备份,导入从库后再记录对应位置开始复制。

修改配置后忘记重启:server-id、log-bin这类参数改完必须重启MySQL才生效,只执行SQL不会改变。

从库被写入:即便设了read-only,有super权限的账号仍可写。
生产环境建议用普通账号访问从库,避免人为制造不一致。

收尾与监控建议

搭建完成后,定期查看Seconds_Behind_Master,延迟持续升高通常意味着从库硬件不足或有大事务阻塞。
日志保留天数expire_logs_days不要设得太短,否则从库断连太久会因日志被清理而无法追平。
如果后续要做读写分离或故障切换,主从复制只是基础,还需要配合中间件或高可用组件来实现。

常见疑问

复制账号必须用root吗?

不需要,也不建议。
单独建一个只有REPLICATION SLAVE权限的账号即可,权限越小越安全。

主从延迟一直是0,说明完全实时吗?

不一定。Seconds_Behind_Master是估算值,短时间大事务或网络抖动都可能让它瞬间跳动,判断健康度要结合业务写入量和多时段观察。

从库可以对外提供查询吗?

可以,这也是读写分离的常见用法,但要接受一定延迟。
对一致性要求高的查询仍应走主库。

分享到:
上一篇
Tomcat与Nginx整合实战:反向代理配置与常见报错处理
下一篇
MySQL索引优化实战:从慢查询到执行计划,新手也能照着做
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意