一、备份
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)