MySQL事务日志

alf*_*ugh 6 mysql innodb transactions journaling

我正在开发一个项目,我们需要在我们的DBMS(MySQL)中使用"事务日志".我们已经切换到使用InnoDB以便将交易用于其他要求.我试图了解交易日记是什么.我一直在寻找一天,包括阅读MySQL文档.也许我只是不寻找合适的关键字,我不确定.或者"交易日记"可能是不恰当的术语.

据我所知,数据库事务日志与日记文件系统类似,因为在将日志提交到文件系统之前会对日志进行更改.从我读过的内容来看,听起来InnoDB引擎在将某些日志提交到磁盘之前将其存储在某种日志中.这听起来准确吗?如果是这样,交易日志在哪里?是ib_logfile0和ib_logfile1吗?

Rol*_*DBA 10

你肯定在这里正确的轨道.

每当InnoDB执行必须提交的事务时,它都是作为两阶段提交完成的.事务首先写在这些日志中.然后,他们从那里承诺.

这在MySQL崩溃或服务器崩溃的情况下有很大帮助.

当你重启MySQL,在ib_logfile0所有未提交的条目和ib_logfile1重播作为的InnoDB的崩溃恢复带来的InnoDB的和谐状态的一部分(这是一贯和持久性部分符合ACID)

如果删除ib_logfile0和ib_logfile1并启动mysql,那么这些文件包含的任何未提交的事务都将丢失.在崩溃恢复周期期间,如果缺少日志文件,则会根据innodb_log_file_size设置重新生成日志文件.

有关InnoDB的详细说明,请参阅MySQL文档.

@karatedog InnoDB的MVCC部分发生在系统表空间内,更好地称为ibdata1.记录在事务开始之前出现的任何数据,以允许访问所需行的其他人在施加任何更新之前查看数据.这允许所谓的REPEATABLE-READ.这属于ACID合规性I,我的意思是隔离.关于事务隔离好,坏或丑的各种场景,我在DBA StackExchange中写了关于此的帖子.

至于MyISAM,崩溃恢复不是自动的.它很容易崩溃.这就是SQL命令REPAIR TABLE存在的原因.这也是为什么MySQL实用程序myisamchk可以-r选择为REPAIR TABLE不在线的MyISAM表执行的原因.

MariaDB和Aria一直试图将防撞安全存储引擎作为MyISAM的替代品.