我想以安全的方式将正在运行的 Rocksdb-instance 备份到同一磁盘上的某个位置,并且在备份期间不会中断处理。
我读过了:
- Rocksdb 备份说明
- 检查点文档
- Rocksdb/utilities/{checkpoint.h,backupable_db.{h,cc}} 中的文档
我的问题是调用是否CreateNewBackupWithMetadata
被标记为非线程安全来表示,对这个函数的两个并发调用将具有不安全的行为,或者表明对数据库的任何并发调用都是不安全的。我已经检查了实现,它似乎正在创建一个检查点——第二篇文章声称它用于 MyRocks 的在线备份——但我仍然不确定,调用的哪一部分不是线程安全的。
我目前将其解释为,它是不安全的,因为CreateBackup...
callsDisableFileDeletions
和 later EnableFileDeletions
,当然,如果进行两个重叠的调用,可能会造成麻烦。由于 SST 文件是不可变的,我并不担心它们,但不确定通过插入修改 WAL 是否会损坏备份。我认为触发备份刷新应该可以防止这种情况,但我想确定。
任何指针或帮助表示赞赏。