Shell 脚本 - 备份阿里云 InfluxDB 脚本
背景需求,增量备份阿里云 InfluxDB 的的数据
因为该 DB 无法使用 influxd backup 命令,只能采取 influx cli 的方式,且该方式查询过多的数据会超时,所以增量备份的方式比较合适。
脚本输出 echo 是因为要记录日志 /data/shells/influxdb.log ,确保 influxdb 备份没有超时。
cat >> prod_influxdb_backup.sh << EOF
#!/bin/bash
source /etc/profile
set -o nounset
set -o errexit
# 自动备份数据库下的用户库
# 数据库相关信息
HOST=xxxxxxxxxxxxx
USER=dbbackup
PASS=xxxxxxxxxxxxx
#备份前一天的数据
TIME=$(date +%F -d '-1 day')
# 数据库备份保留多少天
BDAY=900
# 备份目录,没有会自动创建
BACKUP_PARENT=/data/influxdb_backup
BACKUP_DIR=${BACKUP_PARENT}/${TIME}
DATE=$(date +%F_%H-%M-%S)
echo ${DATE}
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} &>/dev/null
# 保存多少天的数据
find ${BACKUP_PARENT} -maxdepth 1 -type d -mtime +${BDAY} -exec rm -rf {} \;
DB_LIST=$(influx -ssl -host ${HOST} -username "${USER}" -password "${PASS}" -execute 'show databases' 2>/dev/null|egrep -vw "name|_internal|----")
for DB in ${DB_LIST}
do
mkdir -p ${BACKUP_DIR}/${DB}
echo "=== ${DB} ==="
TABLE_LIST=$(influx -ssl -host ${HOST} -username "${USER}" -password "${PASS}" -database ${DB} -execute 'show measurements' |egrep -vw "name|_internal|----")
for TLS in ${TABLE_LIST}
do
echo "=> ${TLS}"
influx -ssl -host ${HOST} -username "${USER}" -password "${PASS}" -database ${DB} -execute "SELECT * FROM ${TLS} WHERE time >= '${TIME} 00:00:00' AND time <= '${TIME} 23:59:59' tz('Asia/Shanghai')" -format csv |gzip > ${BACKUP_DIR}/${DB}/${TLS}.csv.gz
done
done
EOF
crontab -e
0 1 * * * /bin/bash /data/shells/prod_influxdb_backup.sh >> /data/shells/influxdb.log 2>&1

浙公网安备 33010602011771号