binlog日志以及MySQL的数据同步

binlog

binlog是什么

  • 记录所有数据库表结构,表数据的修改,但是不会记录Select和Show这类操作

binlog有几种记录模式

三种记录模式

  • statement: 基于SQL语句的复制

  • row: 基于行的复制,记录每行数据的变更(保证了数据的一致性)

  • mixed: 混合使用statement和row的模式

binlog的应用

  • 系统级应用:主从复制,数据恢复

  • 业务级应用:数据收集

读多写少的场景

  • 可以使用MySQL主从架构来应对

如果读的流量进一步增大,我们是否可以多增加几个从库来应对高并发的读请求

:不可以,MySQL为了将binlog同步给每一个从库,都需要有单独的线程来处理,数据传输多份就要消耗更多的带宽,这会给主库的性能造成很大的压力,不仅不能提升系统性能,反而适得其反,对于生产环境来说,一般都是两到三个从库

MySQL是如何通过Binlog实现数据同步的

数据同步的模式

  • 同步模式:MySQL提交事务的线程会等待所有 从库binlog去同步成功的响应(优点 :不存在丢数据的情况)(缺点:效率低)

  • 异步模式(默认):MySQL提交事务的线程完全不关心binlog是否已经同步到从库,事务执行完成就会返回给客户端响应结果(缺点 :如果主库宕机,数据存在丢失的风险)(优点:效率高)

  • 半同步模式:MySQL提交事务的线程不会等待所有从库binlog同步成功的响应,只要有一部分从库binlog同步成功就会返回给客户端响应结果

数据同步的阶段

  • 数据同步通过三个阶段实现(异步模式)

    • 一阶段:binlog的写入:主库数据写入binlog,再去提交事务,更新存储引擎的数据,事务提交完成后返回给客户端

    • 二阶段:binlog的同步 :MySQL的从库创建的IO线程会连接到主库的binlog,主库会为每一个从库创建一个binlog-dump 线程,然后从库的IO线程从binlog-dump 中接收到主库的文件,把binlog文件写入到本地的relay-log中,最后返回成功的响应给主库

    • 三阶段: binlog重放:从库会创建一个SQL线程,会读取relay-log中的终极日志,重放binlog,从而更新从库中的数据,其实就是把binlog重新执行了一遍,加载到从库的DB中,完成主从的复制

相关推荐
小白男神1 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶1 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G1 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备1 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远1 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs19911 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客2 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安2 天前
MySQL-触发器
数据库·mysql