RocksDB数据库CURRENT文件缺失场景及删除DB后启动失败排查
1. RocksDB数据库目录下CURRENT文件缺失的常见情况
- 异常停机:机器突然掉电、进程被强制终止(如
kill -9),RocksDB在更新CURRENT文件的过程中被中断,导致文件未正常写入或损坏后被清理 - 人为/脚本误操作:手动误删CURRENT文件,或者第三方备份、清理脚本错误移除了该文件
- 磁盘故障:写入CURRENT文件时发生IO错误、磁盘坏块,导致文件写入失败或直接损坏
- 版本迁移异常:RocksDB版本升级/降级过程中,CURRENT文件格式不兼容,被错误删除或无法识别
- 磁盘空间耗尽:写入CURRENT文件时磁盘已满,导致文件写入失败,后续被判定为缺失
2. 结合关机流程与删除DB操作的启动失败原因
已知问题与关机流程、删除DB操作相关,且启动报错CURRENT : does not exist ( create_if_missing is false ),可能的原因包括:
- 删除DB操作不彻底:只删除了CURRENT文件,但未清空整个DB目录,下次启动时RocksDB检测到目录存在但核心CURRENT文件缺失,而
create_if_missing=false不允许自动创建新库,因此启动失败 - 关机时删除操作被中断:应用关机触发删除DB,但进程被提前终止(如收到强制杀进程信号),删除操作仅执行到删除CURRENT文件这一步,后续清理目录的步骤未完成
- 删除逻辑顺序错误:自定义删除代码/脚本先删除CURRENT文件,再尝试删除其他DB文件,但中途因异常退出,导致目录残留且无CURRENT文件
- 并发访问冲突:关机过程中仍有其他线程/进程在访问DB,删除CURRENT文件的同时RocksDB还在尝试更新该文件,最终导致文件丢失且目录状态异常
- 磁盘缓存未同步:删除CURRENT文件后,操作系统磁盘缓存未及时刷新到物理磁盘,看似删除完成,但重启后目录残留且CURRENT文件缺失
内容的提问来源于stack exchange,提问作者Ravikumar Tulugu
相关产品推荐
相关产品推荐

