Skip to content

一、备份

1.1 完整备份

  • 适用于1.6-1.7版本
参数:
influxd backup
    [ -database <db_name> ]  --> 指定需要备份的数据库名
    [ -portable ]            --> 表示在线备份
    [ -host <host:port> ]    --> influxdb服务所在的机器,端口号默认为8088
    [ -retention <rp_name> ] | [ -shard <shard_ID> -retention <rp_name> ]  --> 备份的保留策略,注意shard是挂在rp下的;我们需要备份的就是shard中的数据
    [ -start <timestamp> [ -end <timestamp> ] | -since <timestamp> ]   --> 备份指定时间段的数据
    <path-to-backup>   --> 备份文件的输出地址

root@a1229df1ff1e:/# influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> show databases;
name: databases
name
----
_internal
> create database hello;
> show databases;
name: databases
name
----
_internal
hello

root@a1229df1ff1e:~# influxd backup -portable /root/hello

.。。。
2019/09/13 08:05:32 	/root/hello/20190913T080532Z.meta
2019/09/13 08:05:32 	/root/hello/20190913T080532Z.s1.tar.gz
2019/09/13 08:05:32 	/root/hello/20190913T080532Z.manifest
参数:
influxd backup
    [ -database <db_name> ]  --> 指定需要备份的数据库名
    [ -portable ]            --> 表示在线备份
    [ -host <host:port> ]    --> influxdb服务所在的机器,端口号默认为8088
    [ -retention <rp_name> ] | [ -shard <shard_ID> -retention <rp_name> ]  --> 备份的保留策略,注意shard是挂在rp下的;我们需要备份的就是shard中的数据
    [ -start <timestamp> [ -end <timestamp> ] | -since <timestamp> ]   --> 备份指定时间段的数据
    <path-to-backup>   --> 备份文件的输出地址

root@a1229df1ff1e:/# influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> show databases;
name: databases
name
----
_internal
> create database hello;
> show databases;
name: databases
name
----
_internal
hello

root@a1229df1ff1e:~# influxd backup -portable /root/hello

.。。。
2019/09/13 08:05:32 	/root/hello/20190913T080532Z.meta
2019/09/13 08:05:32 	/root/hello/20190913T080532Z.s1.tar.gz
2019/09/13 08:05:32 	/root/hello/20190913T080532Z.manifest

1.2指定数据库备份

#backup 指定数据库备份
root@a1229df1ff1e:~#influxd backup -portable -database db_name /path/db_name
#backup 指定数据库备份
root@a1229df1ff1e:~#influxd backup -portable -database db_name /path/db_name

1.3备份所有

influxd backup -portable /path
influxd backup -portable /path

1.4时间段数据

只备份部分时间满足要求的数据,可以添加start/end参数

# influxd backup -portable -database db_name -start 2018-07-27T2:31:57Z -end 2018-07-27T2:32:59Z  /path/db_name
# influxd backup -portable -database db_name -start 2018-07-27T2:31:57Z -end 2018-07-27T2:32:59Z  /path/db_name

1.4备份远程主机数据库

备份远程端口是8088

[root@pg02 ~]# influxd backup -portable -database test -host 127.0.0.1:8088 ./test
2020/11/19 03:25:51 backing up metastore to test/meta.00
2020/11/19 03:25:51 backing up db=test
2020/11/19 03:25:51 backing up db=test rp=autogen shard=2 to test/test.autogen.00002.00 since 0001-01-01T00:00:00Z
2020/11/19 03:25:51 backup complete:
2020/11/19 03:25:51 	test/20201119T082551Z.meta
2020/11/19 03:25:51 	test/20201119T082551Z.s2.tar.gz
2020/11/19 03:25:51 	test/20201119T082551Z.manifest
[root@pg02 ~]# influxd backup -portable -database test -host 127.0.0.1:8088 ./test
2020/11/19 03:25:51 backing up metastore to test/meta.00
2020/11/19 03:25:51 backing up db=test
2020/11/19 03:25:51 backing up db=test rp=autogen shard=2 to test/test.autogen.00002.00 since 0001-01-01T00:00:00Z
2020/11/19 03:25:51 backup complete:
2020/11/19 03:25:51 	test/20201119T082551Z.meta
2020/11/19 03:25:51 	test/20201119T082551Z.s2.tar.gz
2020/11/19 03:25:51 	test/20201119T082551Z.manifest

二、恢复

2.2恢复指定数据库

influxd restore 
    [ -db <db_name> ]       --> 待恢复的数据库(备份中的数据库名)
    -portable | -online
    [ -host <host:port> ]    --> influxdb 的服务器
    [ -newdb <newdb_name> ]  --> 恢复到influxdb中的数据库名
    [ -rp <rp_name> ]        --> 备份中的保留策略
    [ -newrp <newrp_name> ]  --> 恢复的保留策略
    [ -shard <shard_ID> ]
    <path-to-backup-files>

#restore,前提这个数据库不存在
root@a1229df1ff1e:~#influxd restore -portable -db db_name -newdb new_db_name /path/db_name
influxd restore 
    [ -db <db_name> ]       --> 待恢复的数据库(备份中的数据库名)
    -portable | -online
    [ -host <host:port> ]    --> influxdb 的服务器
    [ -newdb <newdb_name> ]  --> 恢复到influxdb中的数据库名
    [ -rp <rp_name> ]        --> 备份中的保留策略
    [ -newrp <newrp_name> ]  --> 恢复的保留策略
    [ -shard <shard_ID> ]
    <path-to-backup-files>

#restore,前提这个数据库不存在
root@a1229df1ff1e:~#influxd restore -portable -db db_name -newdb new_db_name /path/db_name

2.3恢复到存在的DB

看官网恢复的文档中,如果想将备份恢复到一个已经存在的database中时,并不是上面那么简单的就可以了,这里采用的一个策略是西安备份到一个临时的db中;然后将临时DB中的数据写入已存在的db中

SELECT * INTO "db_name"."autogen"."db_name_table" FROM "back_db_name_table"

db_name:需要恢复的数据库名
db_name_table:需要恢复的数据库表名字
back_db_name_table:备份数据库表名字

# 首先是将备份恢复到一个不存在的数据库
root@a1229df1ff1e:~#influxd restore -portable -db db_name -newdb new_db_name /path/db_name
SELECT * INTO "db_name"."autogen"."db_name_table" FROM "back_db_name_table"

db_name:需要恢复的数据库名
db_name_table:需要恢复的数据库表名字
back_db_name_table:备份数据库表名字

# 首先是将备份恢复到一个不存在的数据库
root@a1229df1ff1e:~#influxd restore -portable -db db_name -newdb new_db_name /path/db_name

将备份恢复到已经存在的数据库 yhhblogNew 中

# 首先是将备份恢复到一个不存在的数据库 yhhblog_bk 中
influxd restore -portable -db yhhblog -newdb yhhblog_bk yhhblog_per
# 首先是将备份恢复到一个不存在的数据库 yhhblog_bk 中
influxd restore -portable -db yhhblog -newdb yhhblog_bk yhhblog_per

进入 influx 控制台,执行拷贝和删除临时数据库

# 准备 yhhblogNew 数据库
> create database yhhblogNew

# 将临时数据库中的数据导入已存在的数据库中
> use yhhblog_bk
> SELECT * INTO yhhblogNew..:MEASUREMENT FROM /.*/ GROUP BY *
> drop yhhblog_bk
# 准备 yhhblogNew 数据库
> create database yhhblogNew

# 将临时数据库中的数据导入已存在的数据库中
> use yhhblog_bk
> SELECT * INTO yhhblogNew..:MEASUREMENT FROM /.*/ GROUP BY *
> drop yhhblog_bk

2.4保留策略已存在时,恢复

influxd restore -portable -db yhhblog -newdb yhhblog_tmp -rp autogen -newrp autogen_tmp  yhhblog
influxd restore -portable -db yhhblog -newdb yhhblog_tmp -rp autogen -newrp autogen_tmp  yhhblog
> user yhhblog_tmp
> SELECT * INTO yhhblogNew.autogen.:MEASUREMENT FROM /yhhblog_tmp.autogen_tmp.*/ GROUP BY *
> drop database yhhblog_tmp
> user yhhblog_tmp
> SELECT * INTO yhhblogNew.autogen.:MEASUREMENT FROM /yhhblog_tmp.autogen_tmp.*/ GROUP BY *
> drop database yhhblog_tmp

1.4容灾策略

数据备份、恢复,如果不能热备至少要有办法做到冷备

提供tsm文件进行数据持久化,针对这部分数据可完成冷备。

数据写到influxdb时,首先是写入cache和wal文件,默认10分钟||25M 后写入tsm文件。服务重启时,不会立即将wal加载到tsm文件,先加载wal到cache,再从cache写入tsm文件,也遵循写入设定(默认10分钟||25M)