微信优化

weixinyouhua

MySQL主从同步配置详细步骤?主从复制延迟怎么解决

2026-09-23 15:08:00

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

导出完成后解锁:

MySQL主从同步配置详细步骤?主从复制延迟怎么解决

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: Yes
  • Replica_SQL_Running: Yes
  • Seconds_Behind_Master 或 Seconds_Behind_Source 接近 0
  • Last_IO_Error、Last_SQL_Error 为空
  • Retrieved_Gtid_Set 与 Executed_Gtid_Set 正常推进

验证方式很直接:主库执行 CREATE DATABASE sync_test;,从库执行 SHOW DATABASES;,能看到 sync_test 就说明复制链路通了。

常见报错要会看:

  • 1236:binlog 文件或位置不对,重新确认 SHOW MASTER STATUS
  • 1062:主键冲突,通常是主从数据不一致
  • 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;

MySQL主从同步配置详细步骤?主从复制延迟怎么解决

超时参数 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 人力有限
  • 读请求远多于写请求
  • 需要报表库、备份库
  • 能接受秒级到分钟级切换

主主复制的代价

MySQL主从同步配置详细步骤?主从复制延迟怎么解决

主主复制要处理双向写入,两个库同时插入同一唯一键,冲突就会出现,自增 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 和网络,若主库写入压力长期超过从库回放能力,增加从库、拆分读流量或升级从库硬件是直接手段。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待