使用 BendSave 备份和恢复数据
本教程将引导您了解如何使用 BendSave 备份和恢复数据。我们将使用本地 MinIO 实例作为 Databend 的 S3 兼容存储后端和存储备份的目标位置。
开始之前
在开始之前,请确保您已准备好以下先决条件:
-
一台 Linux 机器(x86_64 或 aarch64 架构):在本教程中,我们将在 Linux 机器上部署 Databend。您可以使用本地机器、虚拟机或云实例,例如 AWS EC2。
-
BendSQL 已安装在您的本地机器上。有关如何使用各种包管理器安装 BendSQL 的说明,请参阅 安装 BendSQL。
-
Databend 发布包:从 Databend GitHub Releases 页面 下载发布包。该软件包在
bin
目录中包含databend-bendsave
二进制文件,这是我们将在本教程中用于备份和恢复操作的工具。
databend-v1.2.725-nightly-x86_64-unknown-linux-gnu/
├── bin
│ ├── bendsql
│ ├── databend-bendsave # 本教程中使用的 BendSave 二进制文件
│ ├── databend-meta
│ ├── databend-metactl
│ └── databend-query
├── configs
│ ├── databend-meta.toml
│ └── databend-query.toml
└── ...
步骤 1:在 Docker 中启动 MinIO
- 在您的 Linux 机器上启动一个 MinIO 容器。以下命令启动一个名为 minio 的 MinIO 容器,并公开端口
9000
(用于 API)和9001
(用于 Web 控制台):
docker run -d --name minio \
-e "MINIO_ACCESS_KEY=minioadmin" \
-e "MINIO_SECRET_KEY=minioadmin" \
-p 9000:9000 \
-p 9001:9001 \
minio/minio server /data \
--address :9000 \
--console-address :9001
- 将您的 MinIO 凭据设置为环境变量,然后使用 AWS CLI 创建两个存储桶:一个用于存储备份 (backupbucket),另一个用于存储 Databend 数据 (databend):
export AWS_ACCESS_KEY_ID=minioadmin
export AWS_SECRET_ACCESS_KEY=minioadmin
aws --endpoint-url http://127.0.0.1:9000/ s3 mb s3://backupbucket
aws --endpoint-url http://127.0.0.1:9000/ s3 mb s3://databend
步骤 2:设置 Databend
- 下载最新的 Databend 版本并解压它以获取必要的二进制文件:
wget https://github.com/databendlabs/databend/releases/download/v1.2.25-nightly/databend-dbg-v1.2.725-nightly-x86_64-unknown-linux-gnu.tar.gz
tar -xzvf databend-dbg-v1.2.725-nightly-x86_64-unknown-linux-gnu.tar.gz
- 配置 configs 文件夹中的 databend-query.toml 配置文件。
vi configs/databend-query.toml
以下显示了本教程所需的关键配置:
...
[[query.users]]
name = "root"
auth_type = "no_password"
...
# Storage config.
[storage]
# fs | s3 | azblob | gcs | oss | cos
type = "s3"
...
# To use an Amazon S3-like storage service, uncomment this block and set your values.
[storage.s3]
bucket = "databend"
endpoint_url = "http://127.0.0.1:9000"
access_key_id = "minioadmin"
secret_access_key = "minioadmin"
enable_virtual_host_style = false
- 使用以下命令启动 Meta 和 Query 服务:
./databend-meta -c ../configs/databend-meta.toml > meta.log 2>&1 &
./databend-query -c ../configs/databend-query.toml > query.log 2>&1 &
启动服务后,通过检查其运行状况端点来验证它们是否正在运行。成功的响应应返回 HTTP 状态 200 OK。
curl -I http://127.0.0.1:28101/v1/health
curl -I http://127.0.0.1:8080/v1/health
- 使用 BendSQL 从您的本地机器连接到您的 Databend 实例,然后应用您的 Databend Enterprise 许可证,创建一个表并插入一些示例数据。
bendsql -h <your-linux-host>
SET GLOBAL enterprise_license='<your-license-key>';
CREATE TABLE books (
id BIGINT UNSIGNED,
title VARCHAR,
genre VARCHAR DEFAULT 'General'
);
INSERT INTO books(id, title) VALUES(1, 'Invisible Stars');
- 返回到您的 Linux 机器,验证表数据是否已存储在您的 Databend 存储桶中:
aws --endpoint-url http://127.0.0.1:9000 s3 ls s3://databend/ --recursive
2025-04-07 15:27:06 748 1/169/_b/h0196160323247b1cab49be6060d42df8_v2.parquet
2025-04-07 15:27:06 646 1/169/_sg/h0196160323247c5eb0a1a860a6442c70_v4.mpk
2025-04-07 15:27:06 550 1/169/_ss/h019610dcc72474adb32ef43698db2a09_v4.mpk
2025-04-07 15:27:06 143 1/169/last_snapshot_location_hint_v2
步骤 3:使用 BendSave 备份
- 运行以下命令将您的 Databend 数据备份到 MinIO 中的 backupbucket:
export AWS_ACCESS_KEY_ID=minioadmin
export AWS_SECRET_ACCESS_KEY=minioadmin
./databend-bendsave backup \
--from ../configs/databend-query.toml \
--to 's3://backupbucket?endpoint=http://127.0.0.1:9000/®ion=us-east-1'
<jemalloc>: Number of CPUs detected is not deterministic. Per-CPU arena disabled.
Backing up from ../configs/databend-query.toml to s3://backupbucket?endpoint=http://127.0.0.1:9000/®ion=us-east-1
- 备份完成后,您可以通过列出其内容来验证文件是否已写入 backupbucket:
aws --endpoint-url http://127.0.0.1:9000 s3 ls s3://backupbucket/ --recursive
2025-04-07 15:44:29 748 1/169/_b/h0196160323247b1cab49be6060d42df8_v2.parquet
2025-04-07 15:44:29 646 1/169/_sg/h0196160323247c5eb0a1a860a6442c70_v4.mpk
2025-04-07 15:44:29 550 1/169/_ss/h019610dcc72474adb32ef43698db2a09_v4.mpk
2025-04-07 15:44:29 143 1/169/last_snapshot_location_hint_v2
2025-04-07 15:44:29 344781 databend_meta.db
步骤 4:使用 BendSave 恢复
- 删除 databend 存储桶中的所有文件:
aws --endpoint-url http://127.0.0.1:9000 s3 rm s3://databend/ --recursive
- 删除后,您可以使用 BendSQL 验证在 Databend 中查询表是否失败:
SELECT * FROM books;
error: APIError: QueryFailed: [3001]NotFound (persistent) at read, context: { uri: http://127.0.0.1:9000/databend/1/169/_ss/h019610dcc72474adb32ef43698db2a09_v4.mpk, response: Parts { status: 404, version: HTTP/1.1, headers: {"accept-ranges": "bytes", "content-length": "423", "content-type": "application/xml", "server": "MinIO", "strict-transport-security": "max-age=31536000; includeSubDomains", "vary": "Origin", "vary": "Accept-Encoding", "x-amz-id-2": "dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8", "x-amz-request-id": "18342C51C209C7E9", "x-content-type-options": "nosniff", "x-ratelimit-limit": "144", "x-ratelimit-remaining": "144", "x-xss-protection": "1; mode=block", "date": "Mon, 07 Apr 2025 23:14:45 GMT"} }, service: s3, path: 1/169/_ss/h019610dcc72474adb32ef43698db2a09_v4.mpk, range: 0- } => S3Error { code: "NoSuchKey", message: "The specified key does not exist.", resource: "/databend/1/169/_ss/h019610dcc72474adb32ef43698db2a09_v4.mpk", request_id: "18342C51C209C7E9" }
- 运行以下命令将您的 Databend 数据恢复到 MinIO 中的 databend 存储桶:
./databend-bendsave restore \
--from "s3://backupbucket?endpoint=http://127.0.0.1:9000/®ion=us-east-1" \
--to-query ../configs/databend-query.toml \
--to-meta ../configs/databend-meta.toml \
--confirm
<jemalloc>: Number of CPUs detected is not deterministic. Per-CPU arena disabled.
Restoring from s3://backupbucket?endpoint=http://127.0.0.1:9000/®ion=us-east-1 to query ../configs/databend-query.toml and meta ../configs/databend-meta.toml with confirmation
- 恢复完成后,您可以通过列出其内容来验证文件是否已写回 databend 存储桶:
aws --endpoint-url http://127.0.0.1:9000 s3 ls s3://databend/ --recursive
2025-04-07 23:21:39 748 1/169/_b/h0196160323247b1cab49be6060d42df8_v2.parquet
2025-04-07 23:21:39 646 1/169/_sg/h0196160323247c5eb0a1a860a6442c70_v4.mpk
2025-04-07 23:21:39 550 1/169/_ss/h019610dcc72474adb32ef43698db2a09_v4.mpk
2025-04-07 23:21:39 143 1/169/last_snapshot_location_hint_v2
2025-04-07 23:21:39 344781 databend_meta.db
- 再次使用 BendSQL 查询表,您将看到查询现在成功:
SELECT * FROM books;
┌────────────────────────────────────────────────────────┐
│ id │ title │ genre │
├──────────────────┼──────────────────┼──────────────────┤
│ 1 │ Invisible Stars │ General │
└────────────────────────────────────────────────────────┘