mysql之主从复制

mysql主从复制流程

mysql主从复制流程说明如下:

  1. 主库记录binlog:主库db的更新事件(update、insert、delete等)被写到binlog
  2. 从库连接主库:从库发起请求,连接到主库(一般是集群创建时会设定好主从关系,所以,流程2是独立的)
  3. 主库发送binlog:主库创建一个binlog dump thread,将binlog发送到从库
  4. 写入中继日志:从库会有一个IO thread 将收到的数据写入到中继日志 relay log中
  5. 执行中继日志:从库启动一个sql thread,将数据写到slave库中

复制模式介绍

同步复制

  1. 主库提交事务:主库执行完事务后,将binlog通过dump线程发送给所有从库。
  2. 等待从库确认:
    • 主库需等待所有从库的I/O线程将binlog写入中继日志(relay log),并完成SQL线程的重放(即数据实际更新到从库磁盘)。
    • 从库重放完成后,向主库发送ACK确认。
  3. 主库提交完成:主库收到所有从库的ACK后,才向客户端返回成功,确保数据强一致性。
  • 注意: 多从库场景的性能影响:若有多个从库,主库需等待所有从库完成同步,可能导致延迟显著增加,因此需通过超时机制(如rpl_semi_sync_master_timeout参数)避免长时间阻塞。

异步复制

  1. 主库执行事务并记录Binlog:主库处理写操作后,将数据变更写入Binlog。
  2. 异步推送Binlog到从库:主库通过Binlog Dump线程将Binlog事件异步发送给从库,从库接收后写入Relay Log,无需等待SQL执行完成。
  3. 主库快速返回客户端:主库在Binlog写入本地磁盘后立即向客户端返回成功,不等待从库确认,降低延迟。
  4. 从库异步执行Relay Log:从库的SQL线程独立解析Relay Log并执行SQL,更新本地数据,执行结果不反馈主库。
  • 注意:
    1. 若主库故障且未同步事务较多,可能导致数据丢失,需结合备份策略(如定期全量备份+Binlog归档)降低风险。
    2. 从库故障恢复后,需通过SHOW SLAVE STATUS检查Seconds_Behind_Master,确保延迟在可接受范围内。

半同步复制

  1. 主库执行事务后,将binlog写入本地并通知从库。
  2. 等待条件:仅需至少一个从库接收binlog并写入relay log(无需执行SQL),立即向主库发送ACK确认。
  3. 主库收到ACK后,提交事务并返回客户端成功,后续从库的SQL执行为异步。

增强半同步复制

  1. 主库执行事务时,先不提交,而是等待至少一个从库的I/O线程将binlog写入relay log并返回ACK确认。
  2. 仅当收到ACK后,主库才正式提交事务并返回客户端成功,确保数据已持久化到至少一个从库。
  3. 若超时未收到ACK,主库可配置为自动降级为异步复制或阻塞等待(需结合参数rpl_semi_sync_master_wait_no_slave控制)。
相关推荐
她说人狗殊途1 小时前
[特殊字符] MySQL性能参数查询总结
数据库·mysql
灵犀物润2 小时前
MySQL 8 与 PostgreSQL 17 对比分析及迁移指南
数据库·mysql·postgresql
二闹2 小时前
别再傻傻分不清!MyBatis两种分页方式到底用哪个?
后端·mysql
异世界贤狼转生码农2 小时前
Ubuntu操作系统下使用mysql、mongodb、redis
mysql·mongodb·ubuntu
跑跑快跑3 小时前
Macbook安装MySQL报错
数据库·mysql
小鸡脚来咯6 小时前
mysql mvcc机制详解
数据库·mysql
计算机学姐7 小时前
基于SpringBoot的老年人健康数据远程监控管理系统【2026最新】
java·vue.js·spring boot·后端·mysql·spring·mybatis
夏天的味道٥7 小时前
MySQL explain命令的作用
android·mysql·adb
DemonAvenger8 小时前
MySQL锁机制深度解析:从共享锁到排他锁的技术剖析与实战经验
数据库·mysql·性能优化
朱包林9 小时前
数据库服务-日志管理-备份与恢复-主从同步
linux·运维·服务器·数据库·mysql·云计算