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

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

image.png

influxdb 备份与恢复



参考: influxdb backup and restore


环境:

  • 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. 实例演示


首先创建一个数据库 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
复制代码


a. 备份所有的数据库


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


influxd backup -portable /tmp/data/total
复制代码


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
复制代码


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
复制代码


现在备份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. 恢复到不存在的database


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


influxd restore -portable -db yhhblog -newdb yhhblog_bk yhhblog_per
复制代码


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


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


# 首先是将备份恢复到一个不存在的数据库 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
复制代码


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


influxd restore -portable -db yhhblog -newdb yhhblog_tmp -rp autogen -newrp autogen_tmp  yhhblog
复制代码


进入influx控制台,执行拷贝


> user yhhblog_tmp
> SELECT * INTO yhhblogNew.autogen.:MEASUREMENT FROM /yhhblog_tmp.autogen_tmp.*/ GROUP BY *
> drop database yhhblog_tmp
复制代码


4. 其他


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



相关文章
|
1月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
170 6
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
929 11
|
7月前
|
存储 缓存 数据库
数据库数据删除策略:硬删除vs软删除的最佳实践指南
在项目开发中,“删除”操作常见但方式多样,主要分为硬删除与软删除。硬删除直接从数据库移除数据,操作简单、高效,但不可恢复;适用于临时或敏感数据。软删除通过标记字段保留数据,支持恢复和审计,但增加查询复杂度与数据量;适合需追踪历史或可恢复的场景。两者各有优劣,实际开发中常结合使用以满足不同需求。
632 4
|
9月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课5 在线备份
本文介绍了如何在PolarDB RAC一写多读集群中进行在线备份,特别针对共享存储模式。通过使用`polar_basebackup`工具,可以将实例的本地数据和共享数据备份到本地盘中。实验环境依赖于Docker容器中用loop设备模拟的共享存储。
265 1
|
3月前
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
181 0
|
7月前
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
192 15
|
7月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
8月前
|
物联网 测试技术 API
时序数据库 InfluxDB 3.0 版本性能实测报告:写入吞吐量提升效果验证
TSBS 测试表明,对于少于 100 万台设备的数据集,InfluxDB OSS 3.0 的数据写入速度实际上比 InfluxDB OSS 1.8 更慢。 对于 100 万台及以上设备的数据集,InfluxDB OSS 3.0 的数据写入性能才开始超过 InfluxDB OSS 1.8。 InfluxDB OSS 3.0 的数据写入接口与 InfluxDB 1.8 并不兼容,用户无法顺利迁移。
667 7
|
8月前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。