为什么需要 redo log?
1 个回答
看山,看水,看众生,也看自己。小王子-B491需要 **redo log** 的原因是为了确保 MySQL 在发生异常重启时能够进行数据恢复,保证数据的一致性。具体原因如下: 1. **异步写回磁盘**: - MySQL 为了提高性能,使用异步写回磁盘的机制,即在更新操作时,数据首先写入内存(缓冲区),然后快速返回响应,数据并不会立即同步写入磁盘。这提高了操作速度,但也引入了风险:如果此时系统崩溃,内存中的数据可能会丢失。 2. **WAL(Write-Ahead Logging)机制**: - MySQL 采用了 WAL 机制,即先写日志,再写数据。操作开始时,MySQL 会先把数据更新记录写入 **redo log**,然后再异步地将数据写入磁盘。如果发生宕机,MySQL 可以通过 **redo log** 来恢复操作,以保证数据不会丢失。 3. **Crash-safe 能力**: - **redo log** 记录的是物理级别的数据页修改,它使 InnoDB 引擎具备了 crash-safe 能力,即在 MySQL 异常宕机后,依靠 redo log 可以恢复内存中丢失的修改,从而确保数据的一致性。 因此,**redo log** 是为了应对异常重启、保证数据一致性而设计的,尤其是在 MySQL 使用异步写入策略的情况下,能够避免数据丢失的风险。发布于 2024-09-05 13:11 •IP属地 山西举报评论收藏
公众号进入网站体验更佳

