主从复制复制的是主库binlog中记录的insert、update等数据变更事件;需开启log-bin、配置唯一server-id,采用row格式;依赖binlog dump、io和sql三个线程协作,sql线程串行回放易致延迟;初始化需同步历史数据,否则从库为空。
主从复制就是让一台 MySQL(主库)把数据变更自动同步给另一台或几台 MySQL(从库),实现数据实时备份和读写分离的基础机制。
主从复制到底在复制什么?
它复制的不是整张表或整个库的快照,而是主库上执行过的「数据变更事件」——比如 INSERT、UPDATE、DELETE、CREATE TABLE 这类操作,被记录在主库的 binlog(二进制日志)里。从库不直接读主库磁盘,而是通过网络拉取这些日志,再在本地重放一遍。
- 主库必须开启
log-bin,否则没日志可复制 - 主从必须配置不同的
server-id,否则从库拒绝连接 - 复制默认是异步的:主库写完
binlog就返回成功,不等从库落盘——这意味着主库宕机时,最后几秒的数据可能丢失 -
binlog_format推荐设为row:基于行的复制更可靠,避免函数、时间戳、自增 ID 等非确定性语句导致主从不一致
三个关键线程是怎么协作的?
主从同步靠三个核心线程驱动,缺一不可: