最近有些忙,和同事搞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相关的集群啥的.

没有看懂….