一灰灰blog 一灰灰blog
首页
  • InfluxDB
  • MongoDB
  • MySql
  • 基础系列
  • DB系列
  • 搜索系列
  • MQ系列
  • WEB系列
  • 中间件
  • 运维
  • SpringSecurity
  • SpringCloud
  • QuickAlarm
  • QuickCrawer
  • QuickFix
  • QuickMedia
  • QuickSpi
  • QuickTask
  • 高可用
  • 分类
  • 标签
  • 归档
  • 收藏
  • 关于
GitHub (opens new window)

一灰灰blog

资深搬运工
首页
  • InfluxDB
  • MongoDB
  • MySql
  • 基础系列
  • DB系列
  • 搜索系列
  • MQ系列
  • WEB系列
  • 中间件
  • 运维
  • SpringSecurity
  • SpringCloud
  • QuickAlarm
  • QuickCrawer
  • QuickFix
  • QuickMedia
  • QuickSpi
  • QuickTask
  • 高可用
  • 分类
  • 标签
  • 归档
  • 收藏
  • 关于
GitHub (opens new window)
  • InfluxDB

    • v1.6.0安装和简单使用小结
    • InfluxDB基本概念小结
    • 时序数据库InfluxDB之备份和恢复策略
      • I. 备份
        • 1. 实例演示
      • II. 恢复
        • 1. 恢复到不存在的database
        • 2. 恢复到存在的DB
        • 3. 保留策略已存在时,恢复
        • 4. 其他
      • III. 其他
        • 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
        • 2. 声明
        • 3. 扫描关注
    • InfluxDB之权限管理
    • InfluxDB之配置修改
    • InfluxDb之时间戳显示为日期格式
    • Influx Sql系列教程零:安装及influx-cli使用姿势介绍
    • Influx Sql系列教程一:database 数据库
    • Influx Sql系列教程二:retention policy 保存策略
    • Influx Sql系列教程三:measurement 表
    • Influx Sql系列教程四:series/point/tag/field
    • Influx Sql系列教程五:insert 添加数据
    • Influx Sql系列教程六:insert 修改数据
    • Influx Sql系列教程七:delete 删除数据
    • Influx Sql系列教程八:query数据查询基本篇
    • Influx Sql系列教程九:query数据查询基本篇二
    • Influx Sql系列教程十:query数据查询基本篇三
  • MongoDB

  • MySql

  • 数据库
  • InfluxDB
一灰灰
2018-07-27

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

# influxdb 备份与恢复

参考: influxdb backup and restore (opens new window)

环境:

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

# I. 备份

备份命令

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

# 1. 实例演示

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

> 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
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

# a. 备份所有的数据库

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

influxd backup -portable /tmp/data/total
1

# b. 备份指定数据库

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

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

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

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

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

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

# II. 恢复

命令如下

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

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

# 1. 恢复到不存在的database

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

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

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

> 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
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

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

# 2. 恢复到存在的DB

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

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

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

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

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

# 准备 yhhblogNew 数据库
> create database yhhblogNew

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

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

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

进入influx控制台,执行拷贝

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

# 4. 其他

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

# III. 其他

# 1. 一灰灰Blog (opens new window): https://liuyueyi.github.io/hexblog

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

# 2. 声明

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

  • 微博地址: 小灰灰Blog (opens new window)
  • QQ: 一灰灰/3302797840

# 3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

编辑 (opens new window)
#InfluxDB
上次更新: 2021/10/15, 19:56:22
InfluxDB基本概念小结
InfluxDB之权限管理

← InfluxDB基本概念小结 InfluxDB之权限管理→

最近更新
01
【基础系列】基于maven多环境配置
04-25
02
【WEB系列】内嵌Tomcat配置Accesslog日志文件生成位置源码探索
04-24
03
【搜索系列】ES查询常用实例演示
04-18
更多文章>
Theme by Vdoing | Copyright © 2017-2022 一灰灰Blog
MIT License | 鄂ICP备18017282号 |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×