【发布时间】:2022-01-09 01:26:29
【问题描述】:
MySQL InnoDB 重做日志块大小为 512 字节(可能是磁盘中的一个扇区)。我读了Are disk sector writes atomic?。看起来它取决于底层硬件来决定扇区写入是否是原子的。那么如果不是原子的,InnoDB redo log 怎么保证不会损坏呢?
假设磁盘中最后一个日志块未满,那么 InnoDB 引擎会向该块写入更多日志记录并将其刷新到磁盘。突然断电导致只有部分块已写入磁盘。由于该块的校验和不匹配。其他之前提交的事务在服务器重启后会丢失。
【问题讨论】:
-
在MDEV-14425 上进行了相当长且有趣的讨论,我们可以看到via the implementation 使用了操作系统物理块大小(并且是原子的,在 O_DIRECT for linux >=3.14(和其他?))。
-
@danblack - 听起来像是答案,而不仅仅是评论。
-
@danblack 谢谢。我会接受你的回答。
标签: mysql innodb storage-engines redo-logs