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
|
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
|
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
| influxd restore -portable -db yhhblog -newdb yhhblog_bk yhhblog_per
|
进入 influx 控制台,执行拷贝和删除临时数据库
1 2 3 4 5 6 7
| > 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. 其他
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
3. 扫描关注
一灰灰blog
知识星球