跳到主要内容

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 从检查点恢复

  1. 将检查点目录复制到新的存储位置;
  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. 利用快照实现副本追平

针对副本同步或从节点追平主节点数据的场景,操作流程如下:

  1. 对主节点(或上游数据库)创建快照;
  2. 将 SST 文件传输至副本节点;
  3. 按列族顺序导入 SST 文件;
  4. 通过预写日志(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 备份验证

恢复完成后,务必通过迭代器校验数据完整性。