MySQL数据库基本概念中什么是主从复制?主从架构的基本概念与原理

来源:这里教程网 时间:2026-02-28 20:47:21 作者:

主从复制就是让一台 MySQL(主库)把数据变更自动同步给另一台或几台 MySQL(从库),实现数据实时备份和读写分离的基础机制。

主从复制到底在复制什么?

它复制的不是整张表或整个库的快照,而是主库上执行过的「数据变更事件」——比如

INSERT
UPDATE
DELETE
CREATE TABLE
这类操作,被记录在主库的
binlog
(二进制日志)里。从库不直接读主库磁盘,而是通过网络拉取这些日志,再在本地重放一遍。

主库必须开启
log-bin
,否则没日志可复制
主从必须配置不同的
server-id
,否则从库拒绝连接
复制默认是异步的:主库写完
binlog
就返回成功,不等从库落盘——这意味着主库宕机时,最后几秒的数据可能丢失
binlog_format
推荐设为
row
:基于行的复制更可靠,避免函数、时间戳、自增 ID 等非确定性语句导致主从不一致

三个关键线程是怎么协作的?

主从同步靠三个核心线程驱动,缺一不可:

主库的
Binlog Dump Thread
:每个从库连上来,主库就启一个这个线程,负责把
binlog
内容推过去
从库的
IO Thread
:连接主库,接收
binlog
并写入本地的
relay-log
(中继日志),同时更新
master.info
记录已同步到的位置
从库的
SQL Thread
:读
relay-log
,解析成 SQL 并执行——注意:它是单线程串行回放的,这是主从延迟最常见的根源

你可以用

SHOW PROCESSLIST
在主从两端分别看这三个线程是否活跃;用
SHOW SLAVE STATUS\G
查看
Seconds_Behind_Master
判断延迟程度。

为什么刚配好主从,从库数据还是空的?

因为复制只同步「配置完成后发生的变更」,不会自动搬运历史数据。常见错误是跳过这一步,直接

CHANGE MASTER TO
,结果从库永远追不上。

若主库是新实例、无业务数据,可跳过初始化,直接记下
SHOW MASTER STATUS
File
Position
若主库已有数据,必须先锁表(
FLUSH TABLES WITH READ LOCK
)、导出(
mysqldump
或物理拷贝)、恢复到从库,再解锁、再配置复制起点
跳过初始化又没锁表,会导致主从数据逻辑错位——比如从库少了几万条用户注册记录,但后续订单却正常同步,查起来毫无头绪

真正难的不是配通,而是配稳:延迟突增、

SQL Thread
报错中断、
relay-log
损坏、GTID 开关不一致……这些往往在流量高峰或大事务后才暴露。别只盯着
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
,得定期查
Seconds_Behind_Master
趋势和
SHOW SLAVE STATUS
里的
Exec_Master_Log_Pos
是否持续前进。

相关推荐