Skip to main content

备份和恢复元服务

本文将介绍如何备份元服务数据并从备份中恢复。

元快照(Meta snapshot)是元服务在特定时间点的数据备份。元快照可以持久化存储在与 S3 兼容的存储中。

设置备份参数

要创建元快照,需要在第一次尝试备份之前设置backup_storage_urlbackup_storage_directory的系统参数。

caution

在已有快照的情况下请不要设置 backup_storage_urlbackup_storage_directory的参数,虽然这并非严格禁止,但如果设置的话,请注意在设置之前拍摄的快照将全部无效,并且不能在还原中使用。

有关如何配置系统参数的信息,请查看如何配置系统参数

创建元快照

元快照由元服务创建。

以下是使用risectl新建元快照的示例:

risectl meta backup-meta

risectl包含在预构建的 RisingWave 二进制文件中。详细信息请查看快速上手指南

查看现有元快照

调用以下 SQL 命令可以列出现有的元快照:

SELECT meta_snapshot_id FROM rw_catalog.rw_meta_snapshot;

输出示例:

 meta_snapshot_id 
------------------
3
4

删除元快照

以下是使用risectl删除元快照的示例:

risectl meta delete-meta-snapshots [snapshot_ids]

从元快照中恢复

运行以下步骤从元快照中恢复。

  1. 关闭元服务。

    note

    该步骤尤为重要,因为元备份和恢复过程不会复制 SST 文件。注意任何时候都不允许多个集群在运行具有相同 SST 设置,因为这可能会损坏 SST 文件。

  2. 创建空元存储。

  3. 将元快照恢复到新建的元存储。

    risectl \
    meta \
    restore-meta \
    --meta-store-type etcd \
    --meta-snapshot-id [snapshot_id] \
    --etcd-endpoints [etcd_endpoints] \
    --backup-storage-url [backup_storage_url] \
    --backup-storage-directory [backup_storage_directory ] \
    --hummock-storage-url [hummock_storage_url] \
    --hummock-storage-directory [hummock_storage_directory]

    如果 etcd 启用身份验证,还要指定以下内容:

    --etcd-auth \
    --etcd-username [etcd_username] \
    --etcd-password [etcd_password] \

    restore-meta 从备份存储中读取快照数据,并将其写入 etcd 和 Hummock 存储。

  4. 配置元服务以使用新的元存储。

访问由元快照备份的历史数据

元快照可用于支持历史数据访问,也称为时间旅行查询(time travel query)。

执行以下步骤以进行时间旅行查询。

  1. 列出所有有效的历史时间点,即纪元(epoch)。

    SELECT safe_epoch,safe_epoch_ts,max_committed_epoch,max_committed_epoch_ts FROM rw_catalog.rw_meta_snapshot;

    输出示例:

        safe_epoch    |      safe_epoch_ts      | max_committed_epoch | max_committed_epoch_ts  
    ------------------+-------------------------+---------------------+-------------------------
    3603859827458048 | 2022-12-28 11:08:56.918 | 3603862776381440 | 2022-12-28 11:09:41.915
    3603898821640192 | 2022-12-28 11:18:51.922 | 3603900263432192 | 2022-12-28 11:19:13.922

    在 (safe_epoch,max_committed_epoch) 范围内为有效纪元。例如,在 [3603859827458048, 3603862776381440] 或在 [3603898821640192, 3603900263432192] 范围内的任何纪元都为有效纪元。 safe_epoch_tsmax_committed_epoch_ts为提示性代称。

  2. 设置会话配置 QUERY_EPOCH。默认状态下为 0,表示禁用历史查询。

    SET QUERY_EPOCH=[chosen epoch];

    之后,此会话中的批量查询将返回截至此时期的数据,而非最新数据。

  3. 禁用历史查询。

    SET QUERY_EPOCH=0;
Limitation

RisingWave 仅支持在至少有一个元数据快照的情况下,按特定时间点访问历史数据。