数据库之事务日志

事务日志是数据库确保ACID特性的关键,分为redo log和undo log。redo log用于前滚操作,记录数据页的物理修改,确保在系统崩溃时能恢复数据到最新状态;undo log则用于回滚操作,记录事务开始前的数据状态,支持事务的原子性和回滚。MySQL的InnoDB存储引擎使用这两种日志,通过参数innodb_flush_log_at_trx_commit控制日志刷盘策略,确保数据安全性与性能的平衡。
摘要由CSDN通过智能技术生成

参考:https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html

参考:https://www.cnblogs.com/hjw-zq/p/9802847.html

首先什么是事务?

事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换为另一种状态。
事务必须遵守ACID原则。是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写。

事务的隔离性是通过锁来实现的,而事务的原子性、一致性和持久性则是通过事务日志来实现的。

 

什么是事务日志?

事务日志是一个与数据库文件分开的文件。它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式的变化。事务日志还称作前滚日志或重做日志。事务日志是备份和恢复的重要组件。

事务要保证ACID的完整性必须依靠事务日志做跟踪,每一个操作在真正写入数据数据库之前,先写入到日志文件中。如要删除一行数据会先在日志文件中将此行标记为删除,但是数据库中的数据文件并没有发生变化。只有在(包含多个sql语句)整个事务提交后,再把整个事务中的sql语句批量同步到磁盘上的数据库文件。

 在事务引擎上的每一次写操作都需要执行两遍:
 1.先写入日志文件中。
        写入日志文件中的仅仅是操作过程,而不是操作数据本身,所以速度比写数据库文件速度要快很多。
 2.然后再写入数据库文件中。

       写入数据库文件的操作是重做事务日志中已提交的事务操作的记录。

事务日志的好处?

事务日志采用的追加的方式,因此写日志的操作是磁盘一小块区域的顺序IO,而不像随机IO需要在磁盘上多个地方移动,所以采用事务日志的方式,相对来说快很多,事务日志持久后,内存中的修改在后台慢慢刷回磁盘,期间如果系统发生崩溃,存储引擎在重启的时候依靠事务日志恢复这部分被修改的数据。

 

Mysql的事务日志?redo log和undo log

不同的存储引擎对事务的支持程度不一样.InnoDB是mysql默认的存储引擎。Innodb的事务日志包括redo logundo log。redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作。

redo log和undo log的区别

UndoLog:为了满足事务的原子性,在操作任何数据之前,首先将数据备份UndoLog,然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。undo用来回滚行记录到某个版本。undo log一般是逻辑日志,根据每行记录进行记录。

RedoLog:记录的是新数据的备份。在事务提交前,将RedoLog持久化而不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是RedoLog已经持久化。系统可以根据RedoLog的内容,将所有数据恢复到最新的状态。通常是物理日志,记录的是数据页的物理修改,而不是某一行或某几行修改成怎样怎样&

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值