RocksDB 备份与恢复
本文档详细说明如何在 RocksDB 中执行备份与恢复操作,包括基于快照和基于文件(检查点) 两种方式、各自的适用场景,以及副本同步的实操示例。
1. 备份方式概述
RocksDB 提供两种核心备份方式:
1.1 基于快照的备份
- 利用 RocksDB 内部的SST 快照机制实现。
- 捕获数据库在某个时间点的一致性视图。
- 通常通过遍历列族并导出 SST 文件完成。
- 适用于副本同步、增量备份及快速恢复场景。
1.2 基于文件的备份(检查点)
- 借助 RocksDB 检查点(Checkpoint) API 创建数据库文件的完整副本。
- 生成整个数据库的一致性目录快照。
- 相比手动导出 SST 文件更易用,但备份体积通常更大,且选择性恢复的灵活性较低。
2. 基于检查点的文件备份
RocksDB 提供 rocksdb::Checkpoint 接口实现文件级别的备份操作。
2.1 创建检查点
#include <rocksdb/checkpoint.h>
rocksdb::Checkpoint* checkpoint;
rocksdb::Status s = rocksdb::Checkpoint::Create(db, &checkpoint);
if (!s.ok()) {
// 处理错误
}
s = checkpoint->CreateCheckpoint("/path/to/backup_dir");
if (!s.ok()) {
// 处理错误
}
delete checkpoint;
- 生成的备份目录包含数据库所有文件,具体包括:
MANIFEST文件LOG日志文件- 所有列族对应的全部 SST 文件
- 确保备份具备时间点一致性。
2.2 从检查点恢复
- 将检查点目录复制到新的存储位置;
- 通过检查点路径打开新的 RocksDB 实例:
rocksdb::DB* new_db;
rocksdb::Options options;
s = rocksdb::DB::Open(options, "/path/to/backup_dir", &new_db);
- 恢复后,所有列族及数据与创建检查点时的状态完全一致。
3. 基于快照的备份与恢复
3.1 通过快照创建备份
- 如前文所述,基于快照的备份需按列族导出 SST 文件。
- 适用于增量备份和副本同步场景。
- 可选择性备份指定列族。
3.2 通过快照恢复备份
for (const auto &cf_name : snapshot_order) {
auto cf_handle = db->GetColumnFamilyHandle(cf_name);
db->IngestExternalFile(cf_handle, sst_files_for_cf[cf_name], ingest_options);
}
- 恢复时必须遵循 SST 文件原始导入顺序。
- 可将多个 SST 备份文件合并到已有数据库中。
4. 利用快照实现副本追平
针对副本同步或从节点追平主节点数据的场景,操作流程如下:
- 对主节点(或上游数据库)创建快照;
- 将 SST 文件传输至副本节点;
- 按列族顺序导入 SST 文件;
- 通过预写日志(WAL)或事务日志恢复正常复制流程。
// 示例:将快照应用至从节点
for (const auto &cf_name : snapshot_order) {
auto cf_handle = follower_db->GetColumnFamilyHandle(cf_name);
follower_db->IngestExternalFile(cf_handle, sst_files_for_cf[cf_name], ingest_options);
}
- 确保副本节点状态与快照时间点完全一致。
- 适用于副本的快速启动或滞后副本追平场景。
5. 备份方式对比
| 特性 | 基于快照的备份 | 基于文件的检查点备份 |
|---|---|---|
| 粒度 | 列族级别,支持选择性备份 | 仅支持整库备份 |
| 体积 | 增量备份时体积更小 | 通常体积更大 |
| 恢复灵活性 | 可合并至已有数据库 | 必须整库恢复 |
| 一致性 | 基于单个 SST 文件的时间点一致性 | 整库的原子性时间点一致性 |
| 适用场景 | 副本同步、增量备份、选择性列族恢复 | 全库备份、灾难恢复、数据库迁移 |
| 复杂度 | 较高,需跟踪 SST 文件及列族顺序 | 较低,仅需复制目录即可 |
6. 最佳实践
6.1 优先使用快照备份的场景
- 副本同步
- 增量备份
- 选择性列族恢复
6.2 优先使用检查点备份的场景
- 全库备份
- 灾难恢复
- 数据库迁移或搬迁
6.3 备份元数据跟踪
针对快照备份,需维护以下元数据:
- 列族名称
- SST 文件列表
- 文件导入顺序
6.4 按序应用备份
恢复多列族数据时,按序应用备份是保障数据一致性的关键。
6.5 备份验证
恢复完成后,务必通过迭代器校验数据完整性。