MySQL 的数据恢复分几种:
- Point-in-time recovery,即恢复 DB 到过去某一刻。一般是在一些误操作,比如误删数据后进行
- Recovery from data corruption or disk failure,因为数据文件或者磁盘损坏需要修复,过程与 point-in-time 类似,不再描述
- Crash recovery,崩溃修复,指在 MySQL 异常退出(如操作系统 bug、掉电等)时的恢复
Point-in-Time Recovery
在要恢复的时间点前需要有全量备份,配合 binlog 即可恢复。具体操作看 官方文档。
Crash recovery
崩溃修复有不同的维度:
- 磁盘有 partial-write 的情况下:InnoDB 的 Doublewrite 机制可以解决
- 有未完成的事务、未提交的自增 ID、被破坏的 index tree 等:通过 redo log 恢复。写 log 过程中使用的 2PC 算法 也保证了数据的可靠性