undolog 是binlog_msyql日志-binlog-undolog-redolog
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相关推荐
- 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 ...
- 数据库的binlog、redolog以及undolog
1. binlog 1.1 binlog:记录了数据库表结构和表数据的变更(update/delete/insert/create/truncate),不记录select操作,存储的是逻辑操作,如&q ...
- MYSQL专题-MySQL三大日志binlog、redo log和undo log
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括重做日志(redo log).回滚日志(undo log).二进制日志(bin log).错误日志(err ...
- 必须了解的mysql三大日志-binlog、redo log和undo log
来源:https://juejin.im/post/6860252224930070536 日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括错误日志. ...
- MySQL-日志二进制日志binlog初探
文章目录 生猛干货 官方文档 MySQL日志分类 MySQL服务层日志 存储引擎层日志 binlog binlog都记录了哪些内容 什么时候写binlog binlog 文件以及扩展 何时会生成新的b ...
- mysql dba系统学习(6)二进制日志binlog之二
MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...
- Mysql当前模式让不记录日志_MySQL日志binlog的三种模式
1三种模式的介绍 二进制日志binlog作用: 1.以二进制形式记录更改数据库的SQL语句(insert,update,delete,create,drop,alter等) 2.用于Mysql主从复制 ...
- binlog日志_MySQL三大日志binlog、redo log和undo log
点击蓝色"JavaKeeper"关注我哟 加个"星标",一起成长,做牛逼闪闪的技术人 Keeper导读:日志是mysql数据库的重要组成部分,记录着数据库运行期 ...
- mysql数据库日志binlog保存时效(expire_logs_days)
一.设置语法 1.方法一: 编辑/etc/my.cnf文件,在[mysqld]节点中增加如下两行 max_binlog_size = 500M expire_logs_days = 15 max_bi ...
最新文章
- pandas中两个dataframe的交集和差集
- python得到windows自启动列表
- 3分钟学会如何调度运营海量Redis系统
- php动态删除输入框,jQuery实现动态添加和删除input框实例代码
- java double 小数点后两位小数_Java中double类型的数据精确到小数点后两位
- 三极管放大电路三种类型
- ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
- cmd255command.executereader()打印连接错误_打印经常遇到的几个问题,轻松解决
- GeoDa空间自相关分析和计量模型的权重问题
- svn中文路径 权限设定
- SWF怎么转FLV格式?
- 轮询机制是什么意思(通俗理解轮询)
- Tomcat 500错误:实例化Servlet类异常
- 滴滴AI负责人叶杰平离职,CTO张博暂时接管
- C++ vector 和push_back 详解
- 关于STM32F407和103的主频
- Python4班平均成绩统计_重磅!长春12所热门高中高考成绩全部“亮相”!你看好谁?!...
- 单片机进阶---PCB开发之照葫芦画瓢(一)
- 论文略读1《Direct training for spiking neural networks:faster,larger,better》
- MySQL MGR搭建过程中常遇见的问题及解决办法
热门文章
- OpenGL png图片 纹理贴图,去除png图片黑边
- 安装SQL SERVER 2000时提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作。...
- Flex State
- linux winrar 安装目录,Winrar 在Linux下的安装配置
- 加载MNIST报错:[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法(亲测)
- MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)
- Linux的解压报错tar: Error is not recoverable: exiting now
- 查看tp框架版本方法
- PHP二维数组根据字段排序
- postman可以测试websocket吗_小海塔罗娱乐测试2021年可以脱单吗?