我正在开发一个项目,要求我们在 DBMS (MySQL) 中使用“事务日志”。我们已经改用 InnoDB,以便使用事务来满足另一个需求。我想了解什么是交易日志。我已经搜索了一天多了,包括阅读 MySQL 文档。也许我只是没有寻找正确的关键词,我不确定。或者“交易日志”可能是一个不恰当的术语。
据我了解,数据库事务日志类似于日志文件系统,因为日志更改是在提交到文件系统之前进行的。据我所知,听起来 InnoDB 引擎在将事务提交到磁盘之前将其存储在某种日志中。这听起来准确吗?如果有,交易日志在哪里?是 ib_logfile0 和 ib_logfile1 吗?
您绝对走在正确的道路上。
每当 InnoDB 执行必须提交的事务时,都会以两阶段提交的方式完成。事务首先写入这些日志中。然后,他们从那里开始承诺。
这在 MySQL 崩溃或服务器崩溃时有很大帮助。
当您重新启动 mysql 时,ib_logfile0 和 ib_logfile1 中的所有未提交条目都会作为 InnoDB 崩溃恢复的一部分重播,以使 InnoDB 达到和谐状态(这是一致和持久的部分)酸性合规性 http://en.wikipedia.org/wiki/ACID)
如果删除 ib_logfile0 和 ib_logfile1 并启动 mysql,这些文件包含的任何未提交事务都会丢失。在崩溃恢复周期中,如果日志文件丢失,则会根据日志文件重新生成innodb_log_file_size http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_log_file_size环境。
请参阅MySQL文档对InnoDB的详细解释 http://dev.mysql.com/doc/refman/5.5/en/innodb-storage-engine.html.
@karateog InnoDB 的 MVCC 部分发生在系统表空间中,更广为人知的名称是 ibdata1。记录事务开始之前出现的任何数据,以允许访问所需行的其他人在施加任何更新之前查看数据。这允许所谓的可重复读取。这属于 ACID 合规性的 I 范围,我的意思是隔离。我在 DBA StackExchange 中写了关于事务隔离好、坏或丑陋的各种场景的帖子。
- 先读后写事务 https://dba.stackexchange.com/a/14058/877
- 这两个查询如果依次执行会不会导致死锁? https://dba.stackexchange.com/a/3224/877
- raid 5适合安装mysql吗? https://dba.stackexchange.com/a/13036/877
至于MyISAM,崩溃恢复不是自动的。它很容易崩溃 https://dba.stackexchange.com/a/15079/877。这就是为什么 SQL 命令REPAIR TABLE
存在。这也是 MySQL 实用程序的原因myisamchk
有-r
执行选项REPAIR TABLE
对于不在线的 MyISAM 表。
MariaDB 和 Aria http://kb.askmonty.org/en/aria-faq人们一直在尝试制作一个崩溃安全的存储引擎来替代 MyISAM。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)