基于omv的docker环境搭建了influx。为了担心数据丢失,采用snapraid进行数据容灾,但是当sync时发现influx数据目录一直被占用导致相关数据同步失败。遂决定排除influx目录,通过influx 备份命令实现数据每日独立备份。

建立备份目录的映射关系

由于将influx的数据目录排除在snapraid sync目录范围,所以需要在硬盘新建一个目录,指向docker influx内的一个新目录,如下图所示:

重启docker完成

编写备份脚本

进入到上图中的本地备份目录,新建一个sh文件

1
touch backup.sh

然后写入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
# 获取当前日期,备份当前influx全部数据库
time=$(date "+%Y%m%d-%H%M%S")
cd /var/backup/
mkdir backup-${time}
cd backup-${time}
influxd backup -portable .

echo 备份当前数据 backup-${time} 成功

# 删除昨日数据
yesterdaytime=$(date -d "yesterday" +%Y%m%d)
# cd /var/backup/
rm -rf backup-${yesterdaytime}*
echo 删除昨日数据 backup-${yesterdaytime}* 成功

创建定时任务

在服务器首先获取到influx的容器实例id,docker ps

然后执行备份命令测试一下:

1
docker exec -i 5xxxxxxx /bin/bash -c 'bash /var/backup/backup.sh'

注意,开始写的是docker exec -it 5xxxxxxx /bin/bash -c 'bash /var/backup/backup.sh',本地执行没有问题,但是放到omv的计划任务里一直报错,需要把-it改为-i

为了防止容器重新创建导致id变化,可以动态根据容器名称获取id:

1
docker exec -i `docker ps -a| grep influxdb | awk '{print $1}'` /bin/bash -c 'bash /var/backup/backup.sh'

然后在omv/系统/计划任务,新建一个任务,按需选择日期,然后输入上述执行命令。

确定后,手动执行一遍,看是否有问题。如下所示则说明任务创建成功。