当数据库 crash 后,如何恢复未刷盘的数据到内存中?

193 阅读1分钟

在数据库 crash 后,对于未刷盘的数据的恢复取决于这些数据的状态和是否有相应的持久化记录。以下是对于不同情况的恢复过程:

  1. change buffer写入,redo log虽然做了fsync但未commit,binlog未fsync到磁盘:

    • 这种情况下,由于binlog未刷盘,可能会导致redo log的一部分事务丢失。恢复时,需要检查redo log,并根据redo log的内容来决定是否需要对数据库进行回滚或者修复。
  2. change buffer写入,redo log fsync未commit,binlog已经fsync到磁盘:

    • 首先,需要从binlog中恢复redo log,确保事务的一致性。然后,再从redo log中恢复change buffer中的数据。这种情况下,由于binlog已经刷盘,可以相对可靠地进行恢复。
  3. change buffer写入,redo log和binlog都已经fsync:

    • 在这种情况下,可以直接从redo log中恢复数据,因为redo log和binlog都已经刷盘,数据的一致性相对较高。

总体来说,未刷盘的数据恢复涉及到redo log和binlog的使用。这两个日志文件记录了事务的变更,可以在数据库 crash 后用于数据的一致性恢复。具体的操作和恢复步骤可能因数据库系统而异,这里提到的是一般性的情况。