你在这里绝对是在正确的轨道上。
每当 InnoDB 执行必须提交的事务时,它都是作为两阶段提交完成的。事务首先写入这些日志。然后,他们从那里承诺。
这在 MySQL 崩溃或服务器崩溃的情况下有很大帮助。
当您重新启动 mysql 时,ib_logfile0 和 ib_logfile1 中的所有未提交条目将作为 InnoDB 崩溃恢复的一部分重播,以使 InnoDB 进入和谐状态(这是ACID Compliance的 Consistent and Durable 部分)
如果删除 ib_logfile0 和 ib_logfile1 并启动 mysql,这些文件包含的任何未提交的事务都将丢失。在崩溃恢复周期中,如果日志文件丢失,它们会根据innodb_log_file_size设置重新生成。
有关 InnoDB 的详细说明,请参阅MySQL 文档。
@karatedog InnoDB 的 MVCC 部分发生在系统表空间中,也就是众所周知的 ibdata1。记录在事务开始之前出现的任何数据,以允许访问所需行的其他人在强制执行任何更新之前查看数据。这允许所谓的可重复阅读。这属于 ACID 合规性 I,我的意思是隔离。我在 DBA StackExchange 中写了关于事务隔离是好、坏或丑的各种场景的帖子。
至于 MyISAM,崩溃恢复不是自动的。它很容易崩溃。这就是 SQL 命令REPAIR TABLE
存在的原因。这也是为什么 MySQL 实用程序myisamchk
可以-r
选择对REPAIR TABLE
不在线的 MyISAM 表执行的原因。
MariaDB 和 Aria一直在尝试制作一个崩溃安全的存储引擎来替代 MyISAM。