用shell开发json格式的influxdb的备份还原导出脚本

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


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

1 Response

  1. tes 2016年7月26日 / 下午7:12

    没有看懂….

发表评论

电子邮件地址不会被公开。 必填项已用*标注