最近有些忙,和同事搞redis集群的事情,也就有段时间没搞influxdb了。这两天有个哥们问我influxdb的备份还原,更是有甚至直接向我讨要influxdb的批量备份和还原的脚本,我暂时也没有高大上的方法…..
另外过几天把influxdb集群的相关细节分享给大家,正在整理ppt .
关于influxdb备份的原文链接是 http://xiaorui.cc/?p=1419 http://xiaorui.cc
说正题,我的方法比较简单和粗暴,直接备份他的datadir目录….. 后来就用官方提供的方式.
$ influxd backup /tmp/mysnapshot $ influxd restore -config influxdb.conf /tmp/mysnapshot
官方的备份是压缩格式是个二进制的文件,相对于我后面说的方式要干净的多. 其次influxd还支持增量备份的方法. 突然发现influxdb短短几年的时间,该有的东西都有了…
还是这个命令... influxd backup /tmp/snapshot
你一定会郁闷,刚才的全量备份是这个,为毛增量也是这个,你就执行吧… 会发现influxd其实是基于刚才那个备份的文件做基础,又创建了一个snapshot.0的文件夹…. 这个就是增量的…
不说influxd了,逛influxdb的git issue时候,看到一个老外写了一个关于influxdb备份还原的帖子,我这边就不要脸的复用粘贴了….. 备份其实还可以用接口的方式,其实这个方式更加的挫逼…. post 到接口上,用select语句查出所有数据,然后用jq来写入一个文件…. 当然在数据量不大的时候,应该还是可以的…. 我觉得这脚本更适合做数据的导出,而不是备份还原….
jq又是什么? jq是一个支持stream的json写入程序….
http://stedolan.github.io/jq/ 这是jq的相关资料,你们自己折腾吧.
关于用法:
$ ./influxdb-backup.sh dump oldDB | ./influxdb-backup.sh restore newDB Usage: ./influxdb-backup.sh dump DATABASE [options...] -u USERNAME (default: root) -p PASSWORD (default: root) -h HOST (default: localhost:8086) -s (use HTTPS)
脚本如下:
#!/bin/bash function parse_options { function usage() { echo -e >&2 "Usage: 0 dump DATABASE [options...] \t-u USERNAME\t(default: root) \t-p PASSWORD\t(default: root) \t-h HOST\t\t(default: localhost:8086) \t-s\t\t(use HTTPS)" } if [ "#" -lt 2 ]; then usage; exit 1; fi username=root password=root host=localhost:8086 https=0 shift database=1 shift while getopts u:p:h:s opts do case "{opts}" in u) username="{OPTARG}";; p) password="{OPTARG}";; h) host="{OPTARG}";; s) https=1;; ?) usage; exit 1;; esac done if [ "{https}" -eq 1 ]; then scheme="https" else scheme="http" fi } function dump { parse_options @ curl -s -k -G "{scheme}://{host}/db/{database}/series?u={username}&p={password}&chunked=true" --data-urlencode "q=select * from /.*/" \ | jq . -c -M exit } function restore { parse_options @ while read -r line do echo >&2 "Writing..." curl -X POST -d "[{line}]" "{scheme}://{host}/db/{database}/series?u={username}&p={password}" done exit } case "1" in dump) dump @;; restore) restore@;; *) echo >&2 "Usage: $0 [dump|restore] ..." exit 1;; esac
总结,没有…. 我发现现在用influxdb的人还是有些少,有时间我搞个群,大家可劲的折腾influxdb相关的集群啥的.
没有看懂….