180727-时序数据库InfluxDB之备份和恢复策略

文章目录
  1. influxdb 备份与恢复
    1. I. 备份
      1. 1. 实例演示
        1. a. 备份所有的数据库
        2. b. 备份指定数据库
        3. c. 备份数据库中指定时间段的数据
    2. II. 恢复
      1. 1. 恢复到不存在的database
      2. 2. 恢复到存在的DB
      3. 3. 保留策略已存在时,恢复
      4. 4. 其他
    3. III. 其他
      1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
      2. 2. 声明
      3. 3. 扫描关注

influxdb 备份与恢复

参考: influxdb backup and restore

环境:

  • influxdb v1.6.0
  • 使用influx自动的控制台进行

I. 备份

备份命令

1
2
3
4
5
6
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> --> 备份文件的输出地址

1. 实例演示

首先创建一个数据库 yhhblog, 里面包含两个measurement,对应的数据如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
> show databases
name: databases
name
----
_internal
yhhblog

> use yhhblog
Using database yhhblog
> show measurements
name: measurements
name
----
netLoad
serviceLoad

> select * from netLoad
name: netLoad
time host netIn netOut service
---- ---- ----- ------ -------
1532658769048100401 127.0.0.1 13m 521K app.service.about

> select * from serviceLoad
name: serviceLoad
time cpu host load mem qps rt service
---- --- ---- ---- --- --- -- -------
1532658713805369067 45.23 127.0.0.2 1.21 4145m 1341 1312 app.service.about
1532658718726259226 45.23 127.0.0.1 1.21 4145m 1341 1312 app.service.about

a. 备份所有的数据库

将influxdb中的所有的数据库都备份下来,不加任何的参数

1
influxd backup -portable /tmp/data/total

b. 备份指定数据库

如果只想要备份上面的yhhblog数据库, 添加 -database 参数指定即可

1
2
3
4
5
6
7
8
9
# influxd backup -portable -database yhhblog /tmp/data/yhhblog

2018/07/27 10:38:15 backing up metastore to /tmp/data/yhhblog/meta.00
2018/07/27 10:38:15 backing up db=yhhblog
2018/07/27 10:38:15 backing up db=yhhblog rp=autogen shard=10 to /tmp/data/yhhblog/yhhblog.autogen.00010.00 since 0001-01-01T00:00:00Z
2018/07/27 10:38:15 backup complete:
2018/07/27 10:38:15 /tmp/data/yhhblog/20180727T023815Z.meta
2018/07/27 10:38:15 /tmp/data/yhhblog/20180727T023815Z.s10.tar.gz
2018/07/27 10:38:15 /tmp/data/yhhblog/20180727T023815Z.manifest

c. 备份数据库中指定时间段的数据

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

1
2
3
4
5
6
7
8
9
# influxd backup -portable -database yhhblog -start 2018-07-27T2:31:57Z -end 2018-07-27T2:32:59Z  /tmp/data/yhhblog_per

2018/07/27 10:42:14 backing up metastore to /tmp/data/yhhblog_per/meta.00
2018/07/27 10:42:14 backing up db=yhhblog
2018/07/27 10:42:14 backing up db=yhhblog rp=autogen shard=10 to /tmp/data/yhhblog_per/yhhblog.autogen.00010.00 with boundaries start=2018-07-27T02:31:57Z, end=2018-07-27T02:32:59Z
2018/07/27 10:42:14 backup complete:
2018/07/27 10:42:14 /tmp/data/yhhblog_per/20180727T024214Z.meta
2018/07/27 10:42:14 /tmp/data/yhhblog_per/20180727T024214Z.s10.tar.gz
2018/07/27 10:42:14 /tmp/data/yhhblog_per/20180727T024214Z.manifest

现在备份ok了,问题就是如何确认备份的问题有没有问题呢,备份后的数据如何恢复呢?

II. 恢复

命令如下

1
2
3
4
5
6
7
8
9
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>

首先拿简单的方式来演示恢复策略,并查看下上面的备份数据是否有问题

1. 恢复到不存在的database

下面演示下将前面的导出的备份,恢复到一个新的数据库 yhhblog_bk上,执行命令如下

1
influxd restore -portable -db yhhblog -newdb yhhblog_bk yhhblog_per

顺带验证下上面备份的数据是否有问题,注意到我们恢复的是时间片段的数据备份,因此恢复的数据,应该会排除掉不再上面日期内的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
> show databases
name: databases
name
----
_internal
yhhblog
yhhblog_bk
> use yhhblog_bk
Using database yhhblog_bk
> show measurements
name: measurements
name
----
netLoad
serviceLoad
> select * from netLoad
name: netLoad
time host netIn netOut service
---- ---- ----- ------ -------
1532658769048100401 127.0.0.1 13m 521K app.service.about
> select * from serviceLoad
name: serviceLoad
time cpu host load mem qps rt service
---- --- ---- ---- --- --- -- -------
1532658718726259226 45.23 127.0.0.1 1.21 4145m 1341 1312 app.service.about

注意看前面serviceLoad里面只有一条数据, 即表明我们按照时间进行备份没啥问题

2. 恢复到存在的DB

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

具体的演示步骤如下 (注意本小结的执行可以直接依赖前面恢复的备份数据库中)

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

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

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

1
2
3
4
5
6
7
# 准备 yhhblogNew 数据库
> create database yhhblogNew

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

3. 保留策略已存在时,恢复

1
influxd restore -portable -db yhhblog -newdb yhhblog_tmp -rp autogen -newrp autogen_tmp  yhhblog

进入influx控制台,执行拷贝

1
2
3
> user yhhblog_tmp
> SELECT * INTO yhhblogNew.autogen.:MEASUREMENT FROM /yhhblog_tmp.autogen_tmp.*/ GROUP BY *
> drop database yhhblog_tmp

4. 其他

官方还写了其他两种恢复方式,一个被废弃,一个离线的会导致数据丢失,也不推荐使用,而现在大部分的博文中备份和恢复都是这种过时的方案,不太友好,这里不详细叙述

III. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×