文档首页> 技术教程> MySQL 主从复制搭建与延迟观察

MySQL 主从复制搭建与延迟观察

发布时间:2026-01-22 15:02        更新时间:2026-01-23 03:22
主从复制是 MySQL 自带的同步机制:主库写入,从库实时重放,读请求可以分流到从库,也顺手多了一份实时热备。整套搭建只需要几个配置项和两条命令。 ## 一、主库三行配置 ``` [mysqld] server-id = 1 log_bin = mysql-bin binlog_format = ROW ``` 重启后用 SHOW VARIABLES LIKE 'log_bin%' 确认 binlog 已开启,ROW 格式记录行级变更,复制和恢复都更可靠。server-id 在复制拓扑里必须唯一,后续再加从库依次往下排,重号会导致复制关系错乱。 ## 二、建复制账号并取位点 ``` CREATE USER 'repl'@'10.0.0.%' IDENTIFIED BY '强密码'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.%'; SHOW MASTER STATUS; ``` 记下输出的 File 和 Position 两个值,这是从库开始复制的起点。取位点选在业务低峰,从取位点到从库数据齐全之间主库照常写入,位点就是这段差异的起点。库不大的话,也可以用带 --source-data=2 的 mysqldump 导一份全量给从库,位点会自动写在文件里。 ## 三、从库启动复制 从库配置 server-id = 2,导入全量数据后执行: ``` CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.10', SOURCE_USER='repl', SOURCE_PASSWORD='强密码', SOURCE_LOG_FILE='mysql-bin.000003', SOURCE_LOG_POS=157; START REPLICA; ``` 老版本语法是 CHANGE MASTER TO 加 START SLAVE,8.0.22 之后推荐上面这套新写法。然后验证状态: ``` SHOW REPLICA STATUS\G ``` Replica_IO_Running 和 Replica_SQL_Running 都是 Yes,复制就在正常工作。IO 线程负责拉日志,SQL 线程负责重放,只有 IO 线程在跑,通常是账号或网络的问题。 ## 四、延迟观察与处理 核心指标是 Seconds_Behind_Master,为 0 表示已追平。延迟升高常见三个原因:从库单线程重放跟不上写入(8.0 可调大 replica_parallel_workers 开并行)、单个事务太大(拆小批量提交)、从库磁盘性能差(换更好的盘)。长期延迟的从库既当不了读分流,也当不了热备,监控里要给它单独一条告警。从库的硬件别比主库差太多,重放是单点瓶颈,磁盘慢会长期追不平;大表加索引这类操作放低峰做,否则延迟瞬间飙到小时级。读分流先把报表、后台查询这类容忍延迟的流量切过去,实时性要求高的读留在主库,分级过渡比一刀切稳。 复制不是备份:误删数据的 DELETE 同样会被同步到从库。容灾归容灾,定期备份照旧要做。搭建当天补一份交接文档,主从 IP、复制账号、起始位点各记一行,半年后接手的人会需要它。