MySQL主从同步配置的核心答案: 在一主一从架构下,先让主从 MySQL 版本一致、server_id 唯一、主库开启 binlog,再创建复制账号、记录 binlog 位置或 GTID,从库导入快照后执行 CHANGE REPLICATION SOURCE TO 或 CHANGE MASTER TO,最后用 SHOW REPLICA STATUS 确认 IO 与 SQL 线程均为 Yes。配置本身不复杂,难的是把延迟、权限和故障切换提前纳入设计。
MySQL主从同步配置详细步骤是什么
准备阶段:版本、网络、server_id
主从同步最怕“版本不一致”和“server_id 重复”,前者可能导致 SQL 线程报错,后者会让复制关系混乱,准备两台机器,例如主库 168.1.10,从库 168.1.11,MySQL 都使用 8.0 或都使用 5.7。
- 检查版本:
mysql -V - 检查网络:
telnet 192.168.1.10 3306 - 主库
server-id=1,从库server-id=2,不能相同 - 主从时间同步,避免监控延迟时误判
- 从库建议设置
read_only=ON,减少误写风险
主库 my.cnf 关键配置:
[mysqld] server-id=1 log-bin=mysql-bin binlog_format=ROW expire_logs_days=7 sync_binlog=1 innodb_flush_log_at_trx_commit=1
从库 my.cnf 关键配置:
[mysqld] server-id=2 relay-log=mysql-relay-bin read_only=ON log_slave_updates=ON
改完后重启:systemctl restart mysqld,据 MySQL 官方文档,binlog_format=ROW 能减少部分语句复制不一致问题,生产环境优先考虑。
主库配置:开启 binlog 与创建复制账号
登录主库,创建专用复制账号,不要让从库用 root 复制,权限太大,出问题时不好收场。
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'StrongPass!2026'; GRANT REPLICATION SLAVE ON . TO 'repl'@'192.168.1.%'; FLUSH PRIVILEGES;
如果业务允许短暂锁表,可以拿一致性快照:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
记下 File 和 Position,mysql-bin.000001、154,再开一个会话导出数据:
mysqldump -uroot -p --single-transaction --master-data=2 --flush-logs --all-databases > all.sql
导出完成后解锁:
UNLOCK TABLES;
如果使用 GTID,还要记录 Executed_Gtid_Set,GTID 的好处是故障切换时不用反复找 binlog 位置。
从库配置:导入快照与启动复制
把 all.sql 传到从库并导入:
mysql -uroot -p < all.sql
MySQL 8.0 推荐写法:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.10', SOURCE_USER='repl', SOURCE_PASSWORD='StrongPass!2026', SOURCE_LOG_FILE='mysql-bin.000001', SOURCE_LOG_POS=154; START REPLICA; SHOW REPLICA STATUSG
MySQL 5.7 写法:
CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='StrongPass!2026', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; START SLAVE; SHOW SLAVE STATUSG
GTID 模式则把位置参数换成:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.10', SOURCE_USER='repl', SOURCE_PASSWORD='StrongPass!2026', SOURCE_AUTO_POSITION=1;
状态检查与验证
重点看这些字段:
Replica_IO_Running: YesReplica_SQL_Running: YesSeconds_Behind_Master或Seconds_Behind_Source接近 0Last_IO_Error、Last_SQL_Error为空Retrieved_Gtid_Set与Executed_Gtid_Set正常推进
验证方式很直接:主库执行 CREATE DATABASE sync_test;,从库执行 SHOW DATABASES;,能看到 sync_test 就说明复制链路通了。
常见报错要会看:
1236:binlog 文件或位置不对,重新确认SHOW MASTER STATUS1062:主键冲突,通常是主从数据不一致1045:复制账号密码或权限错误2003:网络、防火墙或 MySQL 未监听
电商高并发场景下MySQL主从同步配置怎么做
半同步复制降低丢失风险
异步复制下,主库提交后不等从库确认,高并发订单场景里,主库宕机可能丢最后一段事务,可以启用半同步复制,让主库至少等待一个从库收到 binlog 再返回。
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; SET GLOBAL rpl_semi_sync_master_enabled=ON; SET GLOBAL rpl_semi_sync_slave_enabled=ON;

超时参数 rpl_semi_sync_master_timeout 要结合业务设置,超时后会自动退回异步复制,避免主库被拖死,业内专家指出,MySQL 异步复制在高并发写入时更容易出现延迟,需要用监控而不是感觉判断。
多从库与读写分离
单从库扛不住报表、备份和读流量时,可以挂多个从库,主库只写,从库承担读请求,常见组合是 MySQL Router、ProxySQL 或应用层多数据源。
- 报表从库:独立硬件,允许延迟稍大
- 在线读从库:延迟要求高,硬件不能太差
- 备份从库:定时物理备份,减少主库压力
- 延迟监控:对
Seconds_Behind_Master设阈值告警
并行复制与延迟监控
MySQL 8.0 可开启并行复制:
replica_parallel_workers=8 replica_parallel_type=LOGICAL_CLOCK replica_preserve_commit_order=ON
从库回放能力取决于磁盘 IO、CPU 和大事务,主库一次更新几百万行,从库很容易延迟,监控可以查:
SELECT FROM performance_schema.replication_applier_status_by_worker;
延迟持续增大时,先找大事务和 DDL,再考虑升级从库硬件或增加从库数量。
MySQL主从同步配置和主主复制哪个好
| 对比项 | 主从复制 | 主主复制 |
|---|---|---|
| 写入方式 | 仅主库写,从库读 | 两台都可写或互为主从 |
| 冲突风险 | 较低 | 较高,需处理自增、唯一键冲突 |
| 故障切换 | 需提升从库或切 VIP | 可较快切换,但一致性复杂 |
| 运维复杂度 | 中等 | 高 |
| 适用场景 | 读多写少、报表、备份 | 多活、特殊容灾需求 |
行业共识认为,主从架构优先保证单向复制,能减少双写冲突,多数业务用一主多从加故障切换工具就够了,主主复制不是不能做,而是要有自增步长、冲突检测、应用分流和回切方案,否则后期排错成本很高。
主从更适合哪些团队
- 中小团队,DBA 人力有限
- 读请求远多于写请求
- 需要报表库、备份库
- 能接受秒级到分钟级切换
主主复制的代价

主主复制要处理双向写入,两个库同时插入同一唯一键,冲突就会出现,自增 ID 还要设置 auto_increment_increment 和 auto_increment_offset,北京、上海、深圳不少团队为了“看起来高可用”上主主,后来发现数据校验更麻烦。
自建MySQL主从同步配置成本高吗
成本构成
自建成本不只是服务器,还包括带宽、备份存储、监控、告警、DBA 时间、故障排查,两台云服务器能做基础主从,但生产环境要考虑跨可用区、快照、日志备份和延迟监控。
- 服务器:主库规格高,从库不能太低
- 带宽:跨机房复制会消耗带宽
- 运维:升级、备份、切主、数据校验都要人
- 监控:延迟、线程状态、磁盘、连接数
- 容灾:同城备库、异地备份另算
云 RDS 与自建怎么选
云数据库 RDS 自带主从高可用、备份和监控,省运维,但单价通常高于自建,自建灵活、可控,成本看起来低,故障时人力成本容易超预期。
| 方式 | 优势 | 代价 |
|---|---|---|
| 自建 MySQL | 可控、可定制、成本弹性 | 运维重、故障自担 |
| 云 RDS 高可用 | 省心、备份监控完善 | 费用较高、部分参数受限 |
MySQL主从同步配置的稳定运行,靠的是版本一致、复制账号权限、binlog 位置或 GTID、监控延迟这几件事,先跑通异步复制,再按业务需要加半同步和多从库,才是更稳妥的落地路径。
MySQL主从同步配置常见问题Q&A
MySQL主从同步配置失败时先查什么
先看 SHOW REPLICA STATUSG 里的 Last_IO_Error 和 Last_SQL_Error,IO 错误查网络、账号、防火墙、主库 binlog 是否还在;SQL 错误查数据冲突、表不存在、权限和字符集。
MySQL主从同步配置一定要用 GTID 吗
不是必须,GTID 能简化故障切换和位置管理,MySQL 8.0 环境更推荐,传统 file + position 仍然可用,但切换时要准确记录新主库的 binlog 文件和位置,混用时主从 GTID 模式要一致。
MySQL主从同步配置后延迟一直增大怎么办
先查主库是否有大事务、批量更新、DDL,再查从库并行复制参数、磁盘 IO、CPU 和网络,若主库写入压力长期超过从库回放能力,增加从库、拆分读流量或升级从库硬件是直接手段。

