MySQL日志系统redo log、binlog、undo log 区别与作用

日志系统主要有redo log(重做日志),undo log(回滚日志)和binlog(归档日志)。

redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志,属于逻辑日志,

是以二进制的形式记录的是这个语句的原始逻辑

二者的主要区别:

1) redo log是属于innoDB层面,binlog属于MySQL Server层面的

2) redo log是物理日志,记录该数据页更新的内容;binlog是逻辑日志,记录的是这个更新语句的原始逻辑

3) binlog可以作为恢复数据使用,主从复制搭建,redo log作为异常宕机或者介质故障后的数据恢复使用

一、三个日志的主要介绍:

1)、重做日志(redo log)

确保事务的持久性,放置发生故障的时间点,尚有脏数据未写入磁盘,在重启mysql的时候,根据redo log

进行重做,刷盘,从而达到事务持久性的作用。

2)、回滚日志(undo log)

保存了事务发生之前数据的一个版本,即那些被事务影响修改的数据,会被记录,可以用来事务回滚操作,用来保证事务

的原子性。

3)、二进制日志(binlog)

用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步,用户数据库基于时间点的还原。

二、一个更新语句的执行过程分析

update T set c=c+1 where ID=2;

1) 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就

在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回

2)执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写

入这行新数据

3)引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。

然后告知执行器执行完成了,随时可以提交事务

4) 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。

5) 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。

三、 innodb_flush_log_at_trx_commit 的设置作用

0: 由mysql的main_thread每秒将存储引擎log buffer中的redo日志写入到log file,并调用文件系统的sync操作,将日志刷新到磁盘。

1:每次事务提交时,将存储引擎log buffer中的redo日志写入到log file,并调用文件系统的sync操作,将日志刷新到磁盘。

2:每次事务提交时,将存储引擎log buffer中的redo日志写入到log file,并由存储引擎的main_thread 每秒将日志刷新到磁盘。

测试演示:

drop table if exists test_flush_log;

create table test_flush_log(id int,name char(50))engine=innodb;

drop procedure if exists proc;

delimiter $$

create procedure proc(i int)

begin

declare s int default 1;

declare c char(50) default repeat('a',50);

while s<=i do

start transaction;

insert into test_flush_log values(null,c);

commit;

set s=s+1;

end while;

end$$

delimiter ;

调用测试: 本机2.844s

set @@global.innodb_flush_log_at_trx_commit=2;

truncate test_flush_log;

call proc(100);

调用测试: 本机5.380s

set @@global.innodb_flush_log_at_trx_commit=1;

truncate test_flush_log;

call proc(100);

undolog 是binlog_msyql日志-binlog-undolog-redolog相关推荐

  1. MySQL三大日志——binlog、redoLog、undoLog详解

    目录跳转电梯 1. redoLog 1.1 为什么需要redo log 1.2 redo log基本概念 1.3 redo log记录形式 2. binlog 2.1 binlog基本概念 2.2 b ...

  2. 数据库的binlog、redolog以及undolog

    1. binlog 1.1 binlog:记录了数据库表结构和表数据的变更(update/delete/insert/create/truncate),不记录select操作,存储的是逻辑操作,如&q ...

  3. MYSQL专题-MySQL三大日志binlog、redo log和undo log

    日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括重做日志(redo log).回滚日志(undo log).二进制日志(bin log).错误日志(err ...

  4. 必须了解的mysql三大日志-binlog、redo log和undo log

    来源:https://juejin.im/post/6860252224930070536 日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括错误日志. ...

  5. MySQL-日志二进制日志binlog初探

    文章目录 生猛干货 官方文档 MySQL日志分类 MySQL服务层日志 存储引擎层日志 binlog binlog都记录了哪些内容 什么时候写binlog binlog 文件以及扩展 何时会生成新的b ...

  6. mysql dba系统学习(6)二进制日志binlog之二

    MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...

  7. Mysql当前模式让不记录日志_MySQL日志binlog的三种模式

    1三种模式的介绍 二进制日志binlog作用: 1.以二进制形式记录更改数据库的SQL语句(insert,update,delete,create,drop,alter等) 2.用于Mysql主从复制 ...

  8. binlog日志_MySQL三大日志binlog、redo log和undo log

    点击蓝色"JavaKeeper"关注我哟 加个"星标",一起成长,做牛逼闪闪的技术人 Keeper导读:日志是mysql数据库的重要组成部分,记录着数据库运行期 ...

  9. mysql数据库日志binlog保存时效(expire_logs_days)

    一.设置语法 1.方法一: 编辑/etc/my.cnf文件,在[mysqld]节点中增加如下两行 max_binlog_size = 500M expire_logs_days = 15 max_bi ...

最新文章

  1. pandas中两个dataframe的交集和差集
  2. python得到windows自启动列表
  3. 3分钟学会如何调度运营海量Redis系统
  4. php动态删除输入框,jQuery实现动态添加和删除input框实例代码
  5. java double 小数点后两位小数_Java中double类型的数据精确到小数点后两位
  6. 三极管放大电路三种类型
  7. ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
  8. cmd255command.executereader()打印连接错误_打印经常遇到的几个问题,轻松解决
  9. GeoDa空间自相关分析和计量模型的权重问题
  10. svn中文路径 权限设定
  11. SWF怎么转FLV格式?
  12. 轮询机制是什么意思(通俗理解轮询)
  13. Tomcat 500错误:实例化Servlet类异常
  14. 滴滴AI负责人叶杰平离职,CTO张博暂时接管
  15. C++ vector 和push_back 详解
  16. 关于STM32F407和103的主频
  17. Python4班平均成绩统计_重磅!长春12所热门高中高考成绩全部“亮相”!你看好谁?!...
  18. 单片机进阶---PCB开发之照葫芦画瓢(一)
  19. 论文略读1《Direct training for spiking neural networks:faster,larger,better》
  20. MySQL MGR搭建过程中常遇见的问题及解决办法

热门文章

  1. OpenGL png图片 纹理贴图,去除png图片黑边
  2. 安装SQL SERVER 2000时提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作。...
  3. Flex State
  4. linux winrar 安装目录,Winrar 在Linux下的安装配置
  5. 加载MNIST报错:[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法(亲测)
  6. MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)
  7. Linux的解压报错tar: Error is not recoverable: exiting now
  8. 查看tp框架版本方法
  9. PHP二维数组根据字段排序
  10. postman可以测试websocket吗_小海塔罗娱乐测试2021年可以脱单吗?