美文网首页
MySQL binlog 原理

MySQL binlog 原理

作者: 技术灭霸 | 来源:发表于2021-11-20 16:20 被阅读0次

一、介绍

MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志;其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,并以"事务"的形式保存在磁盘中;

作用:

  1. 复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves并回放来达到master-slave数据一致的目的
  2. 数据恢复:通过mysqlbinlog工具恢复数据
  3. 增量备份

redo log和binlog区别

  1. binlog是二进制日志,是储存在MySQL Server层面,不管是什么存储引擎,对数据库进行了修改都会产生二进制日志。redo log是属于innoDB层面,只记录该存储引擎中表的修改。并且二进制日志先于redo log被记录
  2. redo log是物理日志,记录该数据页更新的内容;binlog是逻辑日志,记录的是这个更新语句的原始逻辑
  3. redo log是循环写,日志空间大小固定;binlog是追加写,是指一份写到一定大小的时候会更换下一个文件,不会覆盖。
  4. redo log作为异常宕机或者介质故障后的数据恢复使用,binlog可以作为恢复数据使用,主从复制搭建。

binlog格式

Mysql binlog日志有ROW,Statement,MiXED三种格式:

  • statement模式下,每一条会修改数据的sql都会记录在binlog中。不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制。
  • row级别下,不记录sql语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改动(比如alter table),因此这种模式的文件保存的信息太多,日志量太大。
  • mixed,一种折中的方案,普通操作使用statement记录,当无法使用statement的时候使用row。

举例说明 ROW和Statement两种格式的区别

有 statement,row, mixed3种,其中mixed是指前2种的混合.

以insert into xxtable values (x,y,z)为例,

影响: 1行,且为新增1行, 对于其他行没有影响.

这个情况,用row格式,直接复制磁盘上1行的新增变化.

以update xxtable set age=21 where name=’sss’;

这个情况,一般也只是影响1行. 用row也比较合适.

以过年发红包,全公司的人,都涨薪100元.

update xxtable set salary=salary+100;

这个语句带来的影响,是针对每一行的, 因此磁盘上很多row都发生了变化.

此处,适合就statment格式的日志.

2种日志,各有各的高效的地方,mysql提供了mixed类型.

可以根据语句的不同,而自动选择适合的日志格式.

相关文章

  • 数据库

    1.mysql binlog的底层原理分析

  • cannal使用

    a. canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,建...

  • MySQL搭建主从复制

    1.1 主从复制原理 1.2 binlog介绍和relay日志 查看binlog日志: mysql****bin...

  • MySQL之binlog底层原理分析

    最近在准备看MySQL相关的内容,简单的整理一下binlog的原理,加深理解。 binlog基本认识 MySQL中...

  • MySQL binlog 原理

    一、介绍 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)...

  • 阿里开源Canal--②快速入门

    1、mysql初始化 a.canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的bi...

  • mysql 主从复制

    1. mysql的复制是异步复制,有延迟 原理: 2. mysql的复制是基于BinLog日志 Statemen...

  • mysql主从库配置(本地多mysql)

    一、环境1.windows、mysql5.52.本地安装多个mysql 二、主从备份的原理1.binlog文件:开...

  • canal+elasticsearch

    canal: 1.配置mysql canal的原理是基于mysql binlog技术,所以这里一定需要开启mysq...

  • 0基础自学linux运维-2.34-mysql binlog 日

    一、前言 1.1.binlog 1.1.1 binlog简介 Mysql的binlog日志作用是用来记录mysql...

网友评论

      本文标题:MySQL binlog 原理

      本文链接:https://www.haomeiwen.com/subject/ifqutrtx.html