文档文档

备份和恢复数据

此页面记录了早期版本的 InfluxDB OSS。InfluxDB OSS v2 是最新的稳定版本。请参阅 InfluxDB v2 文档

使用 InfluxDB OSS 1.11 backuprestoreexportimport 实用程序来防止意外数据丢失,并保留在数据丢失时恢复数据的能力。

您可以在备份和恢复过程中使用这些工具来

  • 为意外事件提供灾难恢复
  • 将数据迁移到新环境或服务器
  • 将实例恢复到一致状态
  • 导出和导入数据以进行调试

根据要保护的数据量和您的应用程序需求,InfluxDB OSS 1.11 提供了两种方法(如下所述)来管理备份和恢复数据

在 InfluxDB Enterprise 和 OSS 之间备份和恢复

InfluxDB EnterpriseInfluxDB OSS(版本 1.5 及更高版本) 中使用 backuprestore 实用程序来

  • 将 InfluxDB Enterprise 备份文件恢复到 InfluxDB OSS 实例。
  • 备份 InfluxDB OSS 数据,这些数据可以在 InfluxDB Enterprise 集群中恢复。

备份和恢复实用程序

使用 InfluxDB OSS 1.11 backuprestore 实用程序来

  • 一次备份和恢复多个数据库。
  • 备份特定时间范围。
  • 创建与 InfluxDB Enterprise 兼容的备份文件。

使用 backuprestore 实用程序来备份和恢复 InfluxDB OSS 版本 1.4 及更早版本、版本 1.5 及更高版本以及 InfluxDB Enterpriseinfluxd 实例的数据。

备份格式

InfluxDB backup 实用程序以两种格式之一输出数据备份:旧版便携式。每种格式为其他版本的 InfluxDB 提供不同的功能和支持。格式之间的主要区别在于旧版格式只能与 InfluxDB OSS 1.x 一起使用。便携式格式在 InfluxDB 1.5–1.11InfluxDB Enterprise 之间是“便携式”的。

将便携式格式用于 InfluxDB 1.5 及更高版本

除非您需要能够将备份恢复到 InfluxDB 1.4 或更早版本,否则请使用便携式格式。

备份功能旧版格式便携式格式
备份单个数据库
备份多个数据库
备份单个保留策略
备份多个保留策略
备份特定时间范围
备份远程数据库
恢复到 InfluxDB OSS 1.0–1.4
恢复到 InfluxDB OSS 1.5–1.11
恢复到 InfluxDB Enterprise

指定您的备份格式

默认情况下,backuprestore 实用程序以旧版格式创建和恢复备份。要创建或从备份或以便携式格式恢复,请在备份命令中包含 -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

将数据恢复到现有数据库

虽然备份不能直接恢复到现有数据库(离线旧版恢复 除外),但您可以执行以下操作以将数据恢复到现有数据库

  1. 将备份恢复到临时数据库。

    influxd restore -portable \
      -db example-db \
      -newdb example-tmp-db \
      /path/to/backup-directory/
    
    influxd restore \
      -db example-db \
      -newdb example-tmp-db \
      /path/to/backup-directory/
    
  2. 使用 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 如何处理重复点?

  3. 使用 InfluxQL 删除临时数据库。

    DROP DATABASE "example-tmp-db"
    

配置备份和恢复服务

InfluxDB OSS 1.11 backuprestore 实用程序通过 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 exportinflux -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>
  • DDL:InfluxQL CREATE 语句,用于在 导入数据 时创建目标数据库
  • DML:上下文元数据,指定 导入数据 的目标数据库和保留策略
  • 行协议数据

有关可选设置和用法的详细信息,请参阅 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 集群。
  • 对于大数据量,导出-导入方法相对于标准备份和恢复实用程序的优势。
  • 使用自定义管理工具管理用户和计划的导出和导入。

此页内容对您有帮助吗?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源现已发布公开 Alpha 版本

InfluxDB 3 开源现在可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 Alpha 版本的一部分。

InfluxDB 3 Core 是我们新的开源产品。它是一个用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度的安全性。

有关如何入门的更多信息,请查看