作用:mysql服务器的主从配置,这样可以实现读写分离,也可以在主库挂掉后从备用库中恢复。
逻辑复制方案:
1.主库记录日志 2.从库dump日志 3. 从库执行日志 4. 最终一致性
MYSQL主从复制原理流程:
1.Master主库将数据变更DataChanges记录 binlog日志中。
2.Slave起一个I/O线程连接到Master,dump读取Master的binlog日志并写入到Slave的中继日志Relaylog中
3.Slave中的SQL线程读取中继日志Relaylog进行SQL回放执行操作,完成主从复制,保证主从最终一致性。
主从复制问题:
1.单线程复制的问题
#1.1. 主库记录日志-> 从库异步拉取日志-> 主从切换时新主丢日志(造成数据一致性问题)
#1.2 主库并发执行-> 从库单线程执行-> 主从同步延迟(幻读问题:主库新版本,从库老版本)
解决方案:todo
半同步
• 日志发送到从库落盘事务提交
分组半同步
• 每个逻辑机房一个一致性群组
•异步ACK提升性能
#1.2 解决方案:并行复制
多worker并行复制原理:
• SQL线程负责解析日志
• 多Worker并发执行
• 行级别冲突检测(db+table+primary_key ):通过db+table+primary 唯一key做行级别冲突检测,如果已经消费则不再消费。
• 排队提交: 按照主库提交顺序排队提交,保持一致性。如:Master先更新A表再更新B表,Slave也应按照此顺序排队提交从而保持数据最终一致性。
• 消除主从同步延迟