备份和恢复数据
此页面记录了 InfluxDB OSS 的早期版本。InfluxDB OSS v2 是最新的稳定版本。请参阅 InfluxDB v2 文档。
使用 InfluxDB OSS 1.11 backup、restore、export 和 import 工具
来防止意外的数据丢失,并保持在数据丢失时恢复数据的能力。
您可以在备份和恢复程序中使用这些工具来:
- 提供由于意外事件导致的灾难恢复
- 将数据迁移到新的环境或服务器
- 将实例恢复到一致的状态
- 导出和导入数据用于调试
根据需要保护的数据量和您的应用程序要求,InfluxDB OSS 1.11 提供了两种方法,如下所述,用于管理备份和恢复数据:
在InfluxDB Enterprise和OSS之间备份和恢复
使用InfluxDB Enterprise和InfluxDB OSS (版本 1.5及更高版本)中的backup和restore工具来:
- 将InfluxDB Enterprise备份文件恢复到InfluxDB OSS实例。
- 备份可以在 InfluxDB Enterprise 集群中恢复的 InfluxDB OSS 数据。
备份和恢复工具
使用 InfluxDB OSS 1.11 backup 和 restore 工具来:
- 同时备份和恢复多个数据库。
- 备份特定时间范围。
- 创建与 InfluxDB Enterprise 兼容的备份文件。
使用 backup 和 restore 工具来备份和恢复 influxd 实例的数据,适用于 InfluxDB OSS 1.4 及更早版本,以及 1.5 及更高版本和 InfluxDB Enterprise。
备份格式
InfluxDB backup 工具以两种格式之一输出数据备份:旧版 或 可移植。
每种格式提供不同的功能,并支持其他版本的 InfluxDB。
这两种格式之间的主要区别在于旧版格式只能与 InfluxDB OSS 1.x 一起使用。
可移植格式在 InfluxDB 1.5–1.11 和 InfluxDB Enterprise 之间是“可移植的”。
使用适用于InfluxDB 1.5及以后的便携格式
使用便携格式,除非您需要能够将备份恢复到 InfluxDB 1.4 或更早版本。
| 备份功能 | 遗留格式 | 便携格式 |
|---|---|---|
| 备份单个数据库 | ||
| 备份多个数据库 | ||
| 备份单个保留策略 | ||
| 备份多个保留策略 | ||
| 备份特定时间范围 | ||
| 备份远程数据库 | ||
| 恢复到 InfluxDB OSS 1.0–1.4 | ||
| 恢复到 InfluxDB OSS 1.5–1.11 | ||
| 恢复到 InfluxDB Enterprise |
指定您的备份格式
默认情况下,backup 和 restore 工具以传统格式创建和恢复备份。要创建或从备份恢复或以便携式格式恢复,请在备份命令中包含 -portable 标志。
# Create a backup in the portable format
influxd backup -portable /path/to/backup-destination
# Restore from a portable backup
influxd restore -portable /path/to/backup-destination
确定您的备份格式
使用备份目录的目录结构来确定备份的格式。
便携式格式目录结构
- 备份目录/
- 20060102T150405Z.meta (InfluxDB 元数据)
- 20060102T150405Z.s00.tar.gz (InfluxDB 时间序列数据 (分片))
- 20060102T150405Z.s01.tar.gz (InfluxDB 时间序列数据 (分片))
- 20060102T150405Z.manifest (备份清单)
旧版格式目录结构
- 备份目录/
- meta.00 (InfluxDB 元数据)
. .00000.00 (InfluxDB 时间序列数据) . .00001.00 (InfluxDB 时间序列数据)
备份和恢复要求
- InfluxDB 服务 (
influxd) 必须在运行 除非在执行 离线旧版恢复。 - 源和目标的InfluxDB实例必须是相同的InfluxDB版本,或者仅有次要版本的差异。 例如,您可以从InfluxDB 1.7备份数据并将其恢复到InfluxDB 1.8实例。 唯一的例外是将数据从InfluxDB 1.8恢复到1.11。
重要事项
基于时间的备份
当使用 -start 或 -end 标志执行备份时,InfluxDB 备份的是分片,而不是单个点。 每个分片都有开始和结束时间戳,用于标记包含在分片中的时间区间。如果一个分片在指定的时间范围内包含任何点,则整个分片将包含在备份中。
由于大多数分片高度压缩,提取分片以检查每个点将是非常低效的,并给基础系统增加了显著的负担。
在从基于时间的备份中恢复数据时,您可能会看到超出备份时间范围的数据。
备份数据
使用influxd backup 工具来创建存储在InfluxDB中的时间序列数据和元数据的备份。
backup 忽略 WAL 文件和内存缓存数据。
为每个 备份格式 提供以下内容:
-portable: (必需) 指定可移植备份格式-host: InfluxDB 绑定地址 (仅在从远程 InfluxDB 主机创建备份时需要)-db: 数据库名称 (如果未指定数据库名称,则命令备份所有数据库)-rp: 保留策略名称 (如果没有指定保留策略,则命令会备份所有保留策略)-shard: 分片 ID (如果未指定分片 ID,则该命令将备份所有分片。需要保留策略。)-start: 开始时间 (如果没有指定开始时间,则命令会备份所有时间的数据。)-stop: 停止时间 (如果没有指定停止时间,命令将数据备份到现在。)- (必需) 备份目标目录路径
备份示例
备份所有数据库
influxd backup -portable /path/to/backup-directory
从远程InfluxDB实例备份所有数据
influxd backup -portable \
-host 203.0.113.0:8088 \
/path/to/backup-directory
备份特定时间范围
influxd backup -portable \
-start 2022-01-01T00:00:00Z \
-stop 2022-02-01T00:00:00Z \
/path/to/backup-directory
有关基于时间的备份如何工作的详细信息,请参见 基于时间的备份。
从特定时间备份数据到现在
influxd backup -portable \
-start 2022-01-01T00:00:00Z \
/path/to/backup-directory
有关时间基础备份工作的重要信息,请参见 Time-based backups.
备份特定数据库
influxd backup -portable \
-db example-db \
/path/to/backup-directory
备份特定的保留政策
influxd backup -portable \
-db example-db \
-rp example-retention-policy \
/path/to/backup-directory
备份特定的分片
要查看分片ID,请使用SHOW SHARDS InfluxQL语句。
influxd backup -portable \
-rp example-retention-policy \
-shard 123 \
/path/to/backup-directory
-host: InfluxDB 绑定地址 (仅在从远程 InfluxDB 主机创建备份时需要)-db: (必需) 数据库名称-rp: 保留策略名称 (如果没有指定保留策略,则命令会备份所有保留策略)-shard: Shard ID (如果未指定分片ID,则命令将备份所有分片。需要保留策略。)-start: 开始时间 (如果没有指定开始时间,则命令会备份所有时间的数据。)-stop: 停止时间 (如果没有指定停止时间,则命令会将数据备份到现在。)- (必填) 备份目的地目录路径
传统备份示例
备份数据库
influxd backup \
-db example-db \
/path/to/backup-directory
从远程 InfluxDB 实例备份数据库
influxd backup \
-db example-db \
-host 203.0.113.0:8088 \
/path/to/backup-directory
备份特定时间范围
influxd backup \
-db example-db \
-start 2022-01-01T00:00:00Z \
-stop 2022-02-01T00:00:00Z \
/path/to/backup-directory
有关时间基础备份工作的重要信息,请参见 Time-based backups.
从特定时间备份数据到现在
influxd backup \
-db example-db \
-start 2022-01-01T00:00:00Z \
/path/to/backup-directory
有关时间基础备份工作的重要信息,请参见 Time-based backups.
备份特定的保留策略
influxd backup \
-db example-db \
-rp example-retention-policy \
/path/to/backup-directory
备份特定的分片
要查看分片 ID,请使用 SHOW SHARDS InfluxQL 语句。
influxd backup -portable \
-db example-db \
-rp example-retention-policy \
-shard 123 \
/path/to/backup-directory
恢复数据
使用influxd restore工具从InfluxDB备份中恢复时间序列数据和元数据到InfluxDB。
无法恢复到现有数据库
InfluxDB OSS 1.11 restore 实用程序不支持增量备份。 当将数据恢复到正在运行的 InfluxDB 实例时,restore 实用程序执行完整恢复。 为了保护现有数据,restore 实用程序不允许将数据恢复到已经存在的数据库。*
如果目标数据库已经存在,restore工具将返回类似于以下的错误:
error updating meta: DB metadata not changed. database may already exist
有一个解决方法可以将数据恢复到现有数据库中。有关更多信息,请参阅 Restore data to an existing database。
* 离线传统恢复可以用来将数据恢复到现有数据库,但会覆盖数据库中的所有数据。
恢复备份所需的要求和命令取决于 备份格式:
-portable: (必需) 指定可移植备份格式-host: InfluxDB 绑定地址 (仅在将备份恢复到远程 InfluxDB 主机时需要)-db: 数据库名称 (如果未指定数据库名称,则该命令将恢复所有数据库)-newdb: 新数据库名称 (恢复已经存在的数据库时必需)-rp: 保留策略名称 (如果未指定保留策略,则命令将恢复所有保留策略)-newrp: 新的保留策略名称 (在恢复已经存在的保留策略时是必需的)-shard: Shard ID (如果未指定分片ID,则命令将备份所有分片。需要保留策略。)- (必填) 备份目录路径
恢复示例
恢复所有数据库
influxd restore -portable /path/to/backup-directory
将所有数据恢复到远程 InfluxDB 实例
influxd restore -portable \
-host 203.0.113.0:8088 \
/path/to/backup-directory
恢复特定数据库
influxd restore -portable \
-db example-db \
/path/to/backup-directory
将数据恢复到已经存在的数据库
influxd restore -portable \
-db example-db \
-newdb example-new-db \
/path/to/backup-directory
恢复特定的保留策略
influxd backup -portable \
-db example-db \
-rp example-retention-policy \
/path/to/backup-directory
将数据恢复到已存在的保留策略
influxd restore -portable \
-db example-db \
-rp example-rp \
-newrp example-new-rp \
/path/to/backup-directory
恢复特定分片
要还原特定的分片,您必须指定一个数据库和保留策略。
要查看分片 ID,请使用 SHOW SHARDS InfluxQL 语句。
influxd backup -portable \
-db example-db \
-rp example-rp \
-shard 123 \
/path/to/backup-directory
遗留备份可以恢复到正在运行(在线)或停止(离线)的InfluxDB实例。
在线旧版恢复
-online: (必需) 指定目标 InfluxDB 实例正在运行-host: InfluxDB 绑定地址 (仅在从远程 InfluxDB 主机恢复备份时需要)-db: (必需) 数据库名称-newdb: 新数据库名称 (恢复已存在的数据库时必需)-rp: 保留策略名称 (如果未指定保留策略,该命令将备份所有保留策略)-newrp: 新的保留策略名称 (在恢复已经存在的保留策略时是必需的)-shard: 分片 ID (如果未指定分片 ID,则该命令将恢复所有分片。需要保留策略。)- (必填) 备份目的地目录路径
在线遗留恢复示例
恢复数据库
influxd restore -online \
-db example-db \
/path/to/backup-directory
将数据库恢复到远程的 InfluxDB 实例
influxd restore -online \
-db example-db \
-host 203.0.113.0:8088 \
/path/to/backup-directory
将数据恢复到已经存在的数据库
influxd restore -online \
-db example-db \
-newdb example-new-db \
/path/to/backup-directory
恢复特定的保留策略
influxd backup -online \
-db example-db \
-rp example-retention-policy \
/path/to/backup-directory
将数据恢复到已存在的保留策略
influxd restore -online \
-db example-db \
-rp example-rp \
-newrp example-new-rp \
/path/to/backup-directory
恢复特定的分片
要恢复特定的分片,必须指定一个数据库和保留策略。要查看分片ID,请使用SHOW SHARDS InfluxQL语句。
influxd backup -online \
-db example-db \
-rp example-rp \
-shard 123 \
/path/to/backup-directory
离线旧版恢复
离线恢复覆盖数据
离线恢复是破坏性的,将会覆盖目标数据库中的所有数据。
必须在与InfluxDB相同的机器上完成
离线恢复必须在运行 InfluxDB 的机器上进行。除非您通过控制台进入运行 InfluxDB 的机器并在那里执行恢复过程,否则无法远程进行。
-db: (必需) 数据库名称-newdb: 新数据库名称 (恢复已存在的数据库时必需)-rp: 保留策略名称 (如果未指定保留策略,该命令将备份所有保留策略)-newrp: 新的保留策略名称 (在恢复已经存在的保留策略时是必需的)-datadir: (必需) 磁盘上目标数据目录的位置 (参见 InfluxDB 文件系统布局)-metadir: (必需) 目标元目录在磁盘上的位置 (参见 InfluxDB 文件系统布局)-shard: Shard ID (如果未指定分片ID,则命令将备份所有分片。需要保留策略。)- (必填) 备份目的地目录路径
离线遗留恢复示例
恢复数据库
influxd restore \
-db example-db \
-datadir /path/to/data-directory \
-metadir /path/to/meta-directory \
/path/to/backup-directory
恢复特定的保留策略
influxd backup \
-db example-db \
-rp example-retention-policy \
-datadir /path/to/data-directory \
-metadir /path/to/meta-directory \
/path/to/backup-directory
恢复特定分片
要还原特定的分片,您必须指定一个数据库和保留策略。
要查看分片 ID,请使用 SHOW SHARDS InfluxQL 语句。
influxd backup \
-db example-db \
-rp example-rp \
-shard 123 \
-datadir /path/to/data-directory \
-metadir /path/to/meta-directory \
/path/to/backup-directory
将数据恢复到现有数据库
虽然备份不能直接恢复到现有数据库 (除了离线遗留恢复), 您可以执行以下操作将数据恢复到现有数据库:
将备份恢复到临时数据库。
使用InfluxQL或Flux从临时数据库查询数据并将其写回到现有数据库。
-- Repeat for each retention policy in the temporary database SELECT * INTO "example-db".autogen.:MEASUREMENT FROM "example-tmp-db".autogen./.*/ GROUP BY *// Repeat for each retention policy in the temporary database from(bucket: "example-tmp-db/autogen") |> range(start: 0) |> to(bucket: "example-db/autogen")InfluxDB 像往常一样处理此查询添加的重复点。有关更多信息,请参阅 InfluxDB 如何处理重复点?
使用InfluxQL删除临时数据库。
DROP DATABASE "example-tmp-db"
配置备份和恢复服务
InfluxDB OSS 1.11 backup 和 restore 工具通过 TCP 连接执行。
备份和恢复远程过程调用 (RPC) 使用的默认 IP 和端口是 127.0.0.1:8088。
要自定义备份和恢复服务使用的TCP IP和端口,取消注释并更新bind-address配置设置在您的InfluxDB配置文件(influxdb.conf)的根级别。
# Bind address to use for the RPC service for backup and restore.
bind-address = "127.0.0.1:8088"
导出和导入数据
对于大多数应用程序,备份和恢复工具提供了您所需的备份和恢复策略工具。 然而,在某些情况下,标准的备份和恢复工具可能无法充分处理您应用程序中的大量数据。
作为标准备份和恢复工具的替代方案,使用 InfluxDB influx_inspect export 和 influx -import 命令来创建灾难恢复和备份策略的备份和恢复程序。这些命令可以手动执行,也可以包含在定期运行导出和导入操作的 shell 脚本中。 您可以使用这些命令在 InfluxDB OSS 1.11 实例和 InfluxDB Enterprise 集群之间导出和导入数据。
导出数据
使用influx_inspect export 命令从您的InfluxDB OSS 1.11实例中以行协议格式导出数据。选项包括以下内容:
-database: 导出所有或特定数据库-start和-end: 使用开始和结束时间戳进行过滤-compress: 使用GNU zip (gzip)压缩以获得更小的文件和更快的导出
以下示例演示如何导出过滤到一天的数据,并进行压缩以优化速度和文件大小:
influx_inspect export \
-database DATABASE_NAME \
-compress \
-start 2019-05-19T00:00:00.000Z \
-end 2019-05-19T23:59:59.999Z
导出的文件包含以下内容:
# DDL
CREATE DATABASE <DATABASE_NAME> WITH NAME <RETENTION_POLICY>
# DML
# CONTEXT-DATABASE:<DATABASE_NAME>
# CONTEXT-RETENTION-POLICY:<RETENTION_POLICY>
<LINE_PROTOCOL_DATA>
有关可选设置和用法的详细信息,请参见 influx_inspect export 命令。
导入数据
要从文件导入线协议数据,请使用influx -import CLI命令。
在您的导入文件中,包括以下部分:
- 可选: DDL(数据定义语言): 包含用于创建相关 数据库 和管理 保留策略 的 InfluxQL 命令。 如果您的数据库和保留策略已经存在,您的文件可以跳过此部分。
- DML (数据操纵语言): 上下文元数据,指定数据库和(如有需要)导入的保留策略,并包含行协议中的数据。
在下面的示例中,压缩的数据文件(以GNU zip格式)被导入到文件的 DML 元数据指定的数据库中。
influx -import -path -compressed
有关使用 influx -import 命令的详细信息,请参见 从文件导入数据。
示例:灾难恢复的导出和导入
有关使用导出和导入数据方法进行灾难恢复的示例,请参阅2019年Influxdays的“灾难恢复架构。”的演示。在此演示中,Capital One讨论了以下内容:
- 每15分钟从活跃的InfluxDB Enterprise集群导出数据到AWS S3存储桶。
- 使用AWS S3复制命令在S3存储桶中复制导出文件。
- 每15分钟从AWS S3桶导入数据到可用于灾难恢复的InfluxDB企业集群。
- 与标准备份和恢复工具相比,导入导出方法在处理大量数据时的优点。
- 使用自定义管理工具管理用户和定期导入导出。