undo log redo log和binlog有什么用

更新语句会设计到⽇志,具体包含下⾯⼏种

undo log(回滚⽇志):是 Innodb 存储引擎层⽣成的⽇志,实现了事务中的原⼦性,主要⽤于事务回滚和MVCC。

redo log(重做⽇志):是 Innodb 存储引擎层⽣成的⽇志,实现了事务中的持久性,主要⽤于掉电等故障恢复;

binlog (归档⽇志):是 Server 层⽣成的⽇志,主要⽤于数据备份和主从复制;

什么是undo logo

当事务对数据库进⾏更新(插⼊、修改、删除)时,系统会记录相应的 undo log ,以便在事务回滚或系统崩溃时进⾏数据恢复, 主要⽤于事务回滚和MVCC。 undo log 记录的信息包括操作类型(插⼊、删除还是更新),修改前的数据值,被修改的数据的位置,事务标识id等,⽐如在更新⼀条记录时,要把被更新的列的旧值记下来,这样之后回滚时再把这些列更新为旧值就好了。

每⼀次更新操作产⽣的 undo log 格式都有⼀个 roll_pointer 指针(将undo log 串成⼀个链表, 链表也被成为版本链)和⼀个 trx_id 事务id(记录是被哪个事务修改的)

事务回滚:如果事务在执⾏过程中出现错误或被⽤户显式地回滚,系统可以使⽤ undo log 来还原事务所做的所有修改。通过 undo log ,数据库系统可以逆向执⾏事务的操作,将数据库还原到事务开始前的状态。

实现 MVCC(多版本并发控制)关键因素之⼀。MVCC 是通过 ReadView + undo log 实现的。undo log 为每条记录保存多份历史数据,MySQL 在执⾏快照读(普通 select 语句)的时候,会根据事务的 Read View ⾥的信息,顺着 undo log 的版本链找到满⾜其可⻅性的记录

什么是redo log

redo log 是物理⽇志,记录了某个数据⻚做了什么修改,⽐如对 XXX 表空间中的 YYY 数据⻚ ZZZ 偏移量的地⽅做了AAA 更新,每当执⾏⼀个事务就会产⽣这样的⼀条或者多条物理⽇志。在事务提交时,只要先将 redo log 持久化到磁盘即可

什么是binlog

MySQL 在完成⼀条更新操作后,Server 层还会⽣成⼀条 binlog,等之后事务提交的时候,会将该事物执⾏过程中产⽣的所有 binlog 统⼀写 ⼊ binlog ⽂件。

binlog ⽂件是记录了所有数据库表结构变更和表数据修改的⽇志,不会记录查询类的操作,⽐如 SELECT 和 SHOW操作。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值