概述
InfluxDB备份提供的功能:
- 可以在联机(活动)数据库上运行备份和还原功能。
- 用于单个或多个数据库的备份和还原功能,以及可选的时间戳筛选。
- 可以从InfluxDB Enterprise集群导入数据
- 可以导入InfluxDB Enterprise数据库的备份文件。
InfluxDB Enterprise用户:请参阅在InfluxDB Enterprise中备份和还原。
注意: 在InfluxDB OSS 1.5之前,备份实用程序创建的备份文件格式与
InfluxDB Enterprise不兼容。在新的备份实用程序中,作为新的在线还原功能的输入,仍然支持这种旧的格式。不推荐使用InfluxDB OSS 1.4版或更早版本中的脱机备份和还原实用程序,但下面在向后兼容的脱机备份和还原中对此进行了说明。
远程备份和还原(用于InfluxDB OSS)
使用备份和还原实用程序在具有相同版本或仅有细微版本差异的Influxd实例之间备份和还原。例如,可以在1.7.3上备份并在1.7.7上还原。
配置远程连接
要启用备份和还原服务的端口:
- 在InfluxDB配置文件(influxdb.conf)的根级别上,取消对远程节点上的bind-address配置设置的注释。
- 更新bind-address的值为<remote-node-IP>:8088。
- 运行命令时,将IP地址和端口提供给-host参数。
举例
$ influxd backup -portable -database mydatabase -host <remote-node-IP>:8088 /tmp/mysnapshot
备份
改进的备份命令与以前的版本相似,不同之处在于它以与InfluxDB Enterprise兼容的格式生成备份,并且具有一些新的过滤选项以限制导出到备份的数据点的范围。
influxd backup
[ -database <db_name> ]
[ -portable ]
[ -host <host:port> ]
[ -retention <rp_name> ] | [ -shard <shard_ID> -retention <rp_name> ]
[ -start <timestamp> [ -end <timestamp> ] | -since <timestamp> ]
<path-to-backup>
要调用新的InfluxDB Enterprise兼容格式,请使用-portable标志运行influxd backup命令,如下所示:
influxd backup -portable [ arguments ] <path-to-backup>
参数
可选参数放在方括号中。
- [ -database <db_name> ]: 要备份的数据库。 如果未指定,则备份所有数据库。
- [ -portable ]: 以较新的InfluxDB Enterprise兼容格式生成备份文件。 强烈建议所有InfluxDB OSS用户使用。
重要信息:如果未指定-portable,则使用默认的旧式备份实用程序–仅备份主机元存储,除非指定了-database。 如果不使用-portable,请查看下面的“备份(旧版)”以了解预期的行为。
- [ -host <host:port> ]: InfluxDB OSS实例的主机和端口。 默认值为'127.0.0.1:8088'。 远程连接所必需。 例如:-host 127.0.0.1:8088。
- [ -retention <rp_name> ]: 备份的保留策略。 如果未指定,则默认为使用所有保留策略。 如果指定,则需要-database。
- [ -shard <ID> ]: 要备份的shard的Shard ID。 如果指定,那么-retention <name>是必需的。
- [ -start <timestamp> ]: 包括所有从指定时间戳开始的点(RFC3339格式)。 与-since不兼容。 示例:-start 2015-12-24T08:12:23Z。
- [ -end <timestamp> ]: 排除指定时间戳(RFC3339格式)之后的所有结果。 与-since不兼容。 如果在不使用-start的情况下使用,将从1970-01-01开始备份所有数据。 示例:-end 2015-12-31T08:12:23Z。
- [ -since <timestamp> ]: 在指定的时间戳RFC3339格式之后执行增量备份。 除非旧式备份支持需要,否则请使用-start。
备份示例:
备份所有内容:
influxd backup -portable <path-to-backup>
备份文件系统级别最近更改的所有数据库:
influxd backup -portable -start <timestamp> <path-to-backup>
仅备份telegraf数据库:
influxd backup -portable -database telegraf <path-to-backup>
在指定的时间间隔内备份数据库:
influxd backup -portable -database mytsd -start 2017-04-28T06:49:00Z -end 2017-04-28T06:50:00Z /tmp/backup/influxdb
还原
使用带有-portable参数(指示新的企业兼容的备份格式)或-online标志(指示遗留备份格式)的restore命令启动远程还原进程。
influxd restore [ -db <db_name> ]
-portable | -online
[ -host <host:port> ]
[ -newdb <newdb_name> ]
[ -rp <rp_name> ]
[ -newrp <newrp_name> ]
[ -shard <shard_ID> ]
<path-to-backup-files>
还原指定时间段的备份(使用-start和-end)
使用-start或-end参数指定时间间隔的备份是在数据块上执行的,而不是逐点执行。 由于大多数块都是高度压缩的,因此提取每个块以检查每个点都会给正在运行的系统造成计算和磁盘空间负担。 每个数据块都以该块中包含的时间间隔的开始和结束时间戳进行注释。 当您指定-start或-end时间戳时,将备份所有指定的数据,但是也会备份同一块中的其他数据点。预期行为
- 还原数据时,您可能会看到指定时间段之外的数据。
- 如果备份文件中包含重复的数据点,则将再次写入这些点,从而覆盖所有现有数据。
参数
可选参数放在方括号中。
- -portable: 对InfluxDB OSS使用新的企业兼容备份格式。 推荐,而不是-online。 可以将在InfluxDB Enterprise上创建的备份还原到InfluxDB OSS实例。
- -online: 使用旧版备份格式。 仅在无法使用较新的-portable选项时使用。
- [ -host <host:port> ]: InfluxDB OSS实例的主机和端口。 默认值为'127.0.0.1:8088'。 远程连接所必需。 例如:-host 127.0.0.1:8088。
- [ -db <db_name> | -database <db_name> ]: 要从备份还原的数据库的名称。 如果未指定,将还原所有数据库。
- [ -newdb <newdb_name> ]: 将在目标系统上导入存档数据的数据库的名称。 如果未指定,则使用-db的值。 新的数据库名称对于目标系统必须是唯一的。
- [ -rp <rp_name> ]: 要还原的备份中保留策略的名称。 要求设置-db。 如果未指定,将使用所有保留策略。
- [ -newrp <newrp_name> ]: 要在目标系统上创建的保留策略的名称。 要求设置-rp。 如果未指定,则使用-rp值。
- [ -shard <ID> ]: 要还原的分片的分片ID。 如果指定,则需要-db和-rp。
注意:如果您有基于遗留格式的自动备份,请考虑为遗留备份使用新的在线特性。新的备份实用程序允许您将单个数据库还原为活动(在线)实例,同时保留服务器上的所有现有数据。离线还原方法(如下所述)可能导致数据丢失,因为它清除服务器上所有现有的数据库。
还原示例
要还原在备份目录中找到的所有数据库:
influxd restore -portable path-to-backup
要仅还原telegraf数据库(telegraf数据库必须不存在):
influxd restore -portable -db telegraf path-to-backup
将数据还原到已经存在的数据库:
您不能直接还原到已经存在的数据库中。 如果尝试将restore命令运行到现有数据库中,则会收到如下消息:
influxd restore -portable -db existingdb path-to-backup
2018/08/30 13:42:46 error updating meta: DB metadata not changed. database may already exist
restore: DB metadata not changed. database may already exist
- 将现有数据库备份还原到临时数据库。
influxd restore -portable -db telegraf -newdb telegraf_bak path-to-backup
- (使用SELECT ... INTO语句)将数据侧载到现有目标数据库中,然后删除临时数据库。
> USE telegraf_bak
> SELECT * INTO telegraf..:MEASUREMENT FROM /.*/ GROUP BY *
> DROP DATABASE telegraf_bak
还原到已存在的保留策略:
- 将保留策略还原到临时数据库。
influxd restore -portable -db telegraf -newdb telegraf_bak -rp autogen -newrp autogen_bak path-to-backup
- 侧载到目标数据库中并删除临时数据库。
> USE telegraf_bak
> SELECT * INTO telegraf.autogen.:MEASUREMENT FROM /telegraf_bak.autogen_bak.*/ GROUP BY *
> DROP telegraf_bak
向后兼容的离线备份和还原(传统格式)
注意:不推荐使用下面介绍的InfluxDB OSS的向后兼容备份和还原。 InfluxData建议与InfluxDB OSS服务器一起使用更新的企业兼容备份和还原实用程序。
InfluxDB OSS可以在某个时间点对实例进行快照并还原它。 所有备份都是完整备份; 不支持增量备份。 可以备份两种类型的数据,即元存储和指标本身。 Metastore会完整备份。 在与元存储库备份不同的操作中,按数据库备份指标。
备份元存储
InfluxDB元存储包含有关系统状态的内部信息,包括用户信息,数据库和分片元数据,连续查询,保留策略和订阅。 在节点运行时,您可以通过运行以下命令来创建实例的元存储的备份:
influxd backup <path-to-backup>
其中<path-to-backup>是要将备份写入的目录。 没有任何其他参数,备份将仅记录系统元存储库的当前状态。 例如,命令:
$ influxd backup /tmp/backup
2016/02/01 17:15:03 backing up metastore to /tmp/backup/meta.00
2016/02/01 17:15:03 backup complete
将在目录/ tmp / backup中创建一个metastore备份(如果目录不存在,则会创建该目录)。
备份(旧版)
每个数据库都必须单独备份。
要备份数据库,请添加-database标志:
influxd backup -database <mydatabase> <path-to-backup>
其中<mydatabase>是您要备份的数据库的名称,而<path-to-backup>是备份数据的存储位置。
可选标志还包括:
-
-retention <retention-policy-name>
- 此标志可用于备份特定的保留策略。 有关保留策略的更多信息,请参阅保留策略管理。 如果未指定,则将备份所有保留策略。
-shard <shard ID> - 此标志可用于备份特定的分片ID。 要查看可用的碎片,可以使用InfluxDB查询语言运行命令SHOW SHARDS。 如果未指定,则将备份所有分片。
-since <date> - 此标记可用于自特定日期起创建备份,该日期必须为RFC3339格式(例如2015-12-24T08:12:23Z)。 如果您要对数据库进行增量备份,则此标志很重要。 如果未指定,将备份数据库中的所有时间范围。
注意:Metastore备份也包含在每个数据库的备份中
作为一个真实示例,您可以使用以下命令备份自2016年2月1日午夜UTC以来telegraf数据库的自动生成保留策略的备份:
$ influxd backup -database telegraf -retention autogen -since 2016-02-01T00:00:00Z /tmp/backup
2016/02/01 18:02:36 backing up rp=default since 2016-02-01 00:00:00 +0000 UTC
2016/02/01 18:02:36 backing up metastore to /tmp/backup/meta.01
2016/02/01 18:02:36 backing up db=telegraf rp=default shard=2 to /tmp/backup/telegraf.default.00002.01 since 2016-02-01 00:00:00 +0000 UTC
2016/02/01 18:02:36 backup complete
它将把生成的备份发送到/ tmp / backup,然后可以在其中将其压缩并发送到长期存储。
远程备份(旧版)
传统备份模式还支持实时远程备份功能。 请按照上面配置远程连接中的说明配置此功能。
还原(旧版)
此处描述的此脱机还原方法可能会导致数据丢失–清除服务器上所有现有的数据库。 考虑将-online标志与较新的还原方法(如上所述)一起使用,以导入旧数据而不会丢失任何数据。
要还原备份,您将需要使用influxd restore命令。
注意:仅在InfluxDB守护程序停止时才支持从备份还原。
要从备份还原,您需要指定备份的类型,应将备份还原到的路径以及备份的路径。 命令:
influxd restore [ -metadir | -datadir ] <path-to-meta-or-data-directory> <path-to-backup>
恢复备份所需的标志是:
- -metadir <path-to-meta-directory> - 这是您要将metastore备份恢复到的meta目录的路径。 对于打包安装,应将其指定为/ var / lib / influxdb / meta。
-
-datadir <path-to-data-directory> - 这是您要将数据库备份恢复到的数据目录的路径。 对于打包安装,应将其指定为/ var / lib / influxdb / data。
用于还原备份的可选标志为: - -database <database> - 这是您要将数据还原到的数据库。 如果未提供-metadir选项,则此选项是必需的。
- -retention <retention policy> - 这是要还原到的存储数据的目标保留策略。
-
-shard <shard id> - 这是应该还原的分片数据。 如果指定,还必须设置-database和-retention。
按照上面的备份示例,可以分两个步骤还原备份。
- 需要还原元存储库,以便InfluxDB知道存在哪些数据库:
$ influxd restore -metadir /var/lib/influxdb/meta /tmp/backup
Using metastore snapshot: /tmp/backup/meta.00
- 一旦恢复了元存储,我们现在就可以恢复备份的数据。 在上面的真实示例中,我们已将telegraf数据库备份到/ tmp / backup,因此我们还原相同的数据集。 要恢复telegraf数据库:
$ influxd restore -database telegraf -datadir /var/lib/influxdb/data /tmp/backup
Restoring from backup /tmp/backup/telegraf.*
unpacking /var/lib/influxdb/data/telegraf/default/2/000000004-000000003.tsm
unpacking /var/lib/influxdb/data/telegraf/default/2/000000005-000000001.tsm
注意:恢复备份数据后,分片上的权限可能不再准确。 为确保文件权限正确,请运行以下命令:$ sudo chown -R influxdb:influxdb / var / lib / influxdb。
恢复数据和元存储库后,启动数据库:
$ service influxdb start
作为快速检查,您可以通过运行SHOW DATABASES命令来验证元存储库是否知道该数据库:
influx -execute 'show databases'
name: databases
---------------
name
_internal
telegraf
数据库现已成功还原!
官方文档:https://docs.influxdata.com/influxdb/v1.7/administration/backup_and_restore/