回答
MySQL 主从复制的核心是主库 Master 写数据的同时记录 binlog 日志,而从库 Slave 同步 Master 记录的日志并执行重放,将变更同步至从库。
- 主库 Master 在数据变更时(insert、update、delete 等)记录 binlog 日志。
- 从库 Slave 定时探测主库 Master 的 binlog。
- 主库 Master 为每个从库 IO thread 启动一个 dump thread,当主库发生变更时向从库发送 binlog。
- 从库 Slave 将收到 binlog 保存至本地的中继日志 relay log。
- 再者,从库 Slave 启动 SQL thread 从中继日志 relay log 读取变更数据并在本地重放中继日志
- 主从复制结束后,IO thread 和 SQL thread 进入睡眠状态,等待下一次唤醒。
主从复制是 MySQL 解决单点故障、提高系统并发性能和可靠性的重要手段。与此同时,主从复制也会带来数据一致性和复制延迟等挑战。
主从复制的模式
1、异步复制
异步复制是 MySQL 主从复制的默认模式。当发生数据变更时(insert、update、delete 等操作),主库 Master 不等待从库 Slave 回应已接收并应用这些变更就提交。意味着当主库在从库接收数据之前发生故障,那么从库可能会丢失最近变更数据。
2、半同步复制