文档文档

备份和恢复数据

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

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

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

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

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

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

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

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

备份和恢复实用程序

使用 InfluxDB OSS 1.12 backuprestore 实用程序来

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

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

备份格式

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

对 InfluxDB 1.5 及更高版本使用可移植格式

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

备份功能旧格式可移植格式
备份单个数据库
备份多个数据库
备份单个保留策略
备份多个保留策略
备份特定时间范围
备份远程数据库
恢复到 InfluxDB OSS 1.0–1.4
恢复到 InfluxDB OSS 1.5–1.12
恢复到 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.12 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.12 backuprestore 实用程序通过 TCP 连接执行。用于备份和恢复远程过程调用 (RPC) 的默认 IP 和端口是 127.0.0.1:8088

要自定义备份和恢复服务使用的 TCP IP 和端口,请取消注释并更新 InfluxDB 配置文件 (influxdb.conf) 根级别的 bind-address 配置设置

# 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.12 实例和 InfluxDB Enterprise 集群之间导出和导入数据。

导出数据

使用 influx_inspect export 命令 以行协议格式从您的 InfluxDB OSS 1.12 实例导出数据。选项包括以下内容

  • -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 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、最近数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看