使用 Export/Import V2 导出和导入数据
Export/Import V2 会创建可移植的 GreptimeDB 数据快照。你可以使用它备份数据、恢复数据,或在 GreptimeDB 实例之间迁移数据。
V2 快照包含 schema 元数据、manifest 和数据文件。数据文件会被拆分为 chunks,因此中断的导出和导入任务可以从之前的进度继续执行 。
本指南使用以下命令:
greptime cli data export-v2 create:创建快照greptime cli data export-v2 verify:验证快照greptime cli data export-v2 list:列出父路径下的快照greptime cli data export-v2 delete:删除快照greptime cli data import-v2:从快照导入数据
前置条件
使用 Export/Import V2 之前,请确认:
- GreptimeDB HTTP endpoint 可访问,例如
127.0.0.1:4000。 - 你的
greptimebinary 包含cli data export-v2和cli data import-v2命令。 - CLI client 和 GreptimeDB server 都能读写快照存储位置。
对于远程对象存储,仅有快照 URI 还不够。你还需要显式启用一个受支持的存储后端,并传入该后端的连接选项。Export/Import V2 支持 S3-compatible 存储、阿里云 OSS、Google Cloud Storage 和 Azure Blob Storage。例如,对于 S3-compatible 存储,需要同时使用 --s3 和 --s3-region。
对于 file:// 快照,路径必须同时能被 GreptimeDB server 和 CLI client 访问。通常这意味着 CLI 与 standalone server 运行在同一台主机上,或者将同一个文件系统路径挂载到 GreptimeDB server 中。创建快照之前,快照的父目录必须已经存在。对于远程、Kubernetes 或分布式部署,请使用 S3 或 MinIO 等对象存储,而不是本地 file:// 路径。
GreptimeDB server 通过 COPY DATABASE ... TO 写入快照数据文件,因此 file:// 快照路径还必须位于 server 的 copy root 内,即 storage.copy_root,默认为 <storage.data_home>/copy。位于 copy root 之外的路径会被 server 拒绝。对象存储快照不受 copy root 限制,因为 server 会直接把数据写入对象存储。详情请参阅迁移本地 SQL 文件访问。
快照 URI(例如 s3://my-bucket/snapshots/prod)标识快照位置,其中包括 bucket。对象存储选项(例如 --s3-region 和 --s3-endpoint)配置 CLI 如何连接到对应后端。--s3-bucket 和 --s3-root 不会改变快照的读写位置,以 URI 为准。请在 create、verify、import、list 和 delete 命令中传入相同的连接选项。
使用本地文件系统快速开始
只有在 CLI client 和 GreptimeDB server 共享同一路径时,才应使用本地文件系统快照。例如,对于本地 standalone server,如果 CLI 在同一台主机上运行,这种方式可以工作。
本指南中的示例把快照存放在 /tmp/greptime-snapshots 下。请在 GreptimeDB 配置文件中把该目录设置为 server 的 copy root,然后重启 server:
[storage]
copy_root = "/tmp/greptime-snapshots"
也可以保留 默认的 copy root,改用 <storage.data_home>/copy 下的快照路径,例如 file:///path/to/data_home/copy/demo。
创建父目录,并确保 server 和 CLI 都能访问它:
mkdir -p /tmp/greptime-snapshots
创建快照:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/demo
恢复之前先验证快照:
greptime cli data export-v2 verify \
--snapshot file:///tmp/greptime-snapshots/demo
从快照导入:
greptime cli data import-v2 \
--addr 127.0.0.1:4000 \
--from file:///tmp/greptime-snapshots/demo
默认情况下,导出和导入使用 greptime catalog。如果需要使用其他 catalog,请添加 --catalog <catalog>。
导出到远程对象存储
Export/Import V2 可以将快照存储到 AWS S3、MinIO 等 S3-compatible 服务、阿里云 OSS、Google Cloud Storage 和 Azure Blob Storage。下面的示例使用 S3 backend,因为 S3 和 MinIO 是常见选择。对于其他对象存储,请使用 支持的存储后端 中对应的 backend flag 和选项。
S3 或 MinIO
对于 AWS S3 以及 MinIO 等 S3-compatible 服务,请使用 S3 backend。
S3-compatible endpoint
对于 MinIO,请传入 --s3-endpoint:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to s3://greptime/snapshots/local-test \
--s3 \
--s3-bucket greptime \
--s3-region us-west-2 \
--s3-access-key-id superpower_ci_user \
--s3-secret-access-key superpower_password \
--s3-endpoint http://127.0.0.1:9000
验证、导入、列出或删除快照时,也需要使用相同的存储选项:
greptime cli data export-v2 verify \
--snapshot s3://greptime/snapshots/local-test \
--s3 \
--s3-bucket greptime \
--s3-region us-west-2 \
--s3-access-key-id superpower_ci_user \
--s3-secret-access-key superpower_password \
--s3-endpoint http://127.0.0.1:9000
greptime cli data import-v2 \
--addr 127.0.0.1:4000 \
--from s3://greptime/snapshots/local-test \
--s3 \
--s3-bucket greptime \
--s3-region us-west-2 \
--s3-access-key-id superpower_ci_user \
--s3-secret-access-key superpower_password \
--s3-endpoint http://127.0.0.1:9000
对于 AWS S3,请使用相同的 --s3 选项;除非使用自定义 endpoint,否则不要传 --s3-endpoint。如果你的环境使用 instance profile 或其他凭据提供机制,可能不需要显式传入 access key。S3 backend 仍然需要 --s3 和 --s3-region。
导出指定 schemas
默认情况下,export-v2 create 会导出除 information_schema 之外的所有 schema,其中包括 greptime_private schema,导入这样的快照时也会一并恢复 greptime_private。如果要排除它,请使用 --schemas 显式列出需要导出的 schemas。
使用 --schemas 只导出指定 schemas。可以传入逗号分隔的列表:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/observability \
--schemas public,metrics
也可以多次传入该选项:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/observability \
--schemas public \
--schemas metrics
导入时,--schemas 会从快照中选择一个子集:
greptime cli data import-v2 \
--addr 127.0.0.1:4000 \
--from file:///tmp/greptime-snapshots/observability \
--schemas public
如果请求的 schema 不存在于快照中,导入会失败。
只导出 schema
使用 --schema-only 导出表定义,不导出数据:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/schema-only \
--schema-only
导入 schema-only 快照会恢复 schema,但不会导入数据 chunks:
greptime cli data import-v2 \
--addr 127.0.0.1:4000 \
--from file:///tmp/greptime-snapshots/schema-only
选择数据文件格式
使用 --format 选择数据文件格式。支持的值为 parquet、csv 和 json,默认值为 parquet。
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/demo-csv \
--format csv
格式会记录在快照的 manifest 中。import-v2 会从 manifest 中读取格式并自动应用,因此导入时不需要再次指定格式。
按时间范围和 chunk window 导出
对于大数据集,请使用有界时间范围和 chunk window。Export/Import V2 会为范围内的每个 schema 创建一个或多个数据 chunks。
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to s3://greptime/snapshots/prod-2026-06 \
--start-time 2026-06-01T00:00:00Z \
--end-time 2026-07-01T00:00:00Z \
--chunk-time-window 1d \
--s3 \
--s3-bucket greptime \
--s3-region us-west-2 \
--s3-access-key-id superpower_ci_user \
--s3-secret-access-key superpower_password \
--s3-endpoint http://127.0.0.1:9000
--chunk-time-window 需要同时指定 --start-time 和 --end-time。
Chunks 会按时间窗口创建。例如,15 分钟的范围配合 --chunk-time-window 5m 会创建 3 个 chunks。导入时,数据任务按 chunk 和 schema 调度。如果快照包含 3 个 chunks,且有 2 个 schema 包含数据,则导入会调度 6 个数据任务。
快照数据文件也会按 schema 和 chunk 组织。例如,一个多 chunk 快照可能包含如下路径:
data/logs/1/app_logs.parquet
data/logs/2/app_logs.parquet
data/logs/3/app_logs.parquet
data/public/1/host_metrics.parquet
data/public/2/host_metrics.parquet
data/public/3/host_metrics.parquet
请根据数据量和数据密度选择 chunk window:
- 对于较小或稀疏的数据集,使用更大的 window,避免产生太多小 chunks。
- 对于较大的数据集,使用更小的 window,让每个 chunk 保持在可管理的大小。
- 可以先从
1d开始,再根据导出耗时和 chunk 大小调整。
调整并行度
导出有两个并行度选项:
--parallelism控制每个 schema、每个 chunk 上 server-sideCOPY DATABASE的并行度。默认值为1。--chunk-parallelism控制 client 同时运行多少个 export chunks。默认值为1,有效范围是1..=64。
导入使用:
--task-parallelism控制 client 同时运行多少个 import data tasks。默认值为1,有效范围是1..=64。
请逐步提高这些值,并监控 GreptimeDB、对象存储和网络资源使用情况。