Documentation

备份和恢复数据

此页面记录了 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 Enterprise 集群中恢复的 InfluxDB OSS 数据。

备份和恢复工具

使用 InfluxDB OSS 1.11 backuprestore 工具来:

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

使用 backuprestore 工具来备份和恢复 influxd 实例的数据,适用于 InfluxDB OSS 1.4 及更早版本,以及 1.5 及更高版本和 InfluxDB Enterprise

备份格式

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

确定您的备份格式

使用备份目录的目录结构来确定备份的格式。

便携式格式目录结构

  • 备份目录/
    • 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

将数据恢复到现有数据库

虽然备份不能直接恢复到现有数据库 (除了离线遗留恢复), 您可以执行以下操作将数据恢复到现有数据库:

  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 命令的详细信息,请参见 从文件导入数据

示例:灾难恢复的导出和导入

有关使用导出和导入数据方法进行灾难恢复的示例,请参阅2019年Influxdays的“灾难恢复架构。”的演示。在此演示中,Capital One讨论了以下内容:

  • 每15分钟从活跃的InfluxDB Enterprise集群导出数据到AWS S3存储桶。
  • 使用AWS S3复制命令在S3存储桶中复制导出文件。
  • 每15分钟从AWS S3桶导入数据到可用于灾难恢复的InfluxDB企业集群。
  • 与标准备份和恢复工具相比,导入导出方法在处理大量数据时的优点。
  • 使用自定义管理工具管理用户和定期导入导出。


Flux的未来

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

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

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

有关如何开始的更多信息,请查看: