备份和恢复数据
此页面记录了早期版本的 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 OSS 数据,这些数据可以在 InfluxDB Enterprise 集群中恢复。
备份和恢复实用程序
使用 InfluxDB OSS 1.11 backup
和 restore
实用程序来
- 一次备份和恢复多个数据库。
- 备份特定时间范围。
- 创建与 InfluxDB Enterprise 兼容的备份文件。
使用 backup
和 restore
实用程序来备份和恢复 InfluxDB OSS 版本 1.4 及更早版本、版本 1.5 及更高版本以及 InfluxDB Enterprise 的 influxd
实例的数据。
备份格式
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
确定备份的格式
使用备份目录的目录结构来确定备份的格式。
便携式格式目录结构
- backup-directory/
- 20060102T150405Z.meta (InfluxDB 元数据)
- 20060102T150405Z.s00.tar.gz (InfluxDB 时间序列数据(分片))
- 20060102T150405Z.s01.tar.gz (InfluxDB 时间序列数据(分片))
- 20060102T150405Z.manifest (备份清单)
旧版格式目录结构
- backup-directory/
- meta.00 (InfluxDB 元数据)
- <db-name>.<rp-name>.00000.00 (InfluxDB 时间序列数据)
- <db-name>.<rp-name>.00001.00 (InfluxDB 时间序列数据)
备份和恢复要求
- InfluxDB 服务 (
influxd
) 必须正在运行,除非执行 离线旧版恢复。 - 源 InfluxDB 实例和目标 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
有关基于时间的备份如何工作的重要信息,请参阅 基于时间的备份。
备份特定数据库
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
: 分片 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
有关基于时间的备份如何工作的重要信息,请参阅 基于时间的备份。
备份从特定时间到现在的数据
influxd backup \
-db example-db \
-start 2022-01-01T00:00:00Z \
/path/to/backup-directory
有关基于时间的备份如何工作的重要信息,请参阅 基于时间的备份。
备份特定保留策略
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
有一种将数据恢复到现有数据库的解决方法。有关更多信息,请参阅 将数据恢复到现有数据库。
* 离线旧版恢复可以用于将数据恢复到现有数据库,但会覆盖数据库中的所有数据。
恢复备份的要求和必要命令取决于 备份格式
-portable
: (必需) 指定便携式备份格式-host
: InfluxDB 绑定地址 (仅当将备份恢复到远程 InfluxDB 主机时才需要)-db
: 数据库名称 (如果未指定数据库名称,则命令恢复所有数据库)-newdb
: 新数据库名称 (恢复已存在的数据库时必需)-rp
: 保留策略名称 (如果未指定保留策略,则命令恢复所有保留策略)-newrp
: 新保留策略名称 (恢复已存在的保留策略时必需)-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
: 分片 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
命令的详细信息,请参阅 从文件导入数据。
示例:导出和导入以进行灾难恢复
有关使用导出和导入数据方法进行灾难恢复的示例,请参阅 Influxdays 2019 年关于 “灾难恢复架构设计” 的演示文稿。在此演示文稿中,Capital One 讨论了以下内容
- 每 15 分钟从活动的 InfluxDB Enterprise 集群导出数据到 AWS S3 存储桶。
- 使用 AWS S3 复制命令复制 S3 存储桶中的导出文件。
- 每 15 分钟从 AWS S3 存储桶导入数据到可用于灾难恢复的 InfluxDB Enterprise 集群。
- 对于大数据量,导出-导入方法相对于标准备份和恢复实用程序的优势。
- 使用自定义管理工具管理用户和计划的导出和导入。
此页内容对您有帮助吗?
感谢您的反馈!