备份与恢复 #
一、备份概述 #
1.1 备份类型 #
text
备份类型:
全量备份
├── 完整数据副本
├── 包含所有Bucket
├── 包含元数据
└── 恢复完整
增量备份
├── 只备份变化数据
├── 节省存储空间
├── 备份速度快
└── 需要基础备份
元数据备份
├── 用户和权限
├── Bucket配置
├── Task配置
└── Dashboard配置
1.2 备份策略 #
text
备份策略建议:
生产环境
├── 每日全量备份
├── 每小时增量备份
├── 异地备份
└── 保留多个版本
开发环境
├── 每周全量备份
├── 按需备份
└── 本地备份即可
关键数据
├── 实时复制
├── 多地备份
└── 定期验证
二、CLI备份 #
2.1 全量备份 #
bash
# 备份所有数据
influx backup /path/to/backup \
--org my-org \
--token YOUR_TOKEN
# 备份特定Bucket
influx backup /path/to/backup \
--bucket my-bucket \
--org my-org \
--token YOUR_TOKEN
# 备份到压缩文件
influx backup /path/to/backup.tar.gz \
--org my-org \
--token YOUR_TOKEN \
--compress
2.2 增量备份 #
bash
# 增量备份(基于上次备份)
influx backup /path/to/incremental \
--org my-org \
--token YOUR_TOKEN \
--since $(cat /path/to/last-backup-time)
# 记录备份时间
date +%s > /path/to/last-backup-time
2.3 远程备份 #
bash
# 备份到远程服务器
influx backup /path/to/backup \
--host http://remote-server:8086 \
--org my-org \
--token YOUR_TOKEN
# 备份到S3(使用工具)
influx backup /tmp/backup --compress
aws s3 cp /tmp/backup.tar.gz s3://my-bucket/influxdb-backup/
三、CLI恢复 #
3.1 全量恢复 #
bash
# 恢复所有数据
influx restore /path/to/backup \
--org my-org \
--token YOUR_TOKEN
# 恢复特定Bucket
influx restore /path/to/backup \
--bucket my-bucket \
--org my-org \
--token YOUR_TOKEN
# 恢复到新Bucket
influx restore /path/to/backup \
--bucket my-bucket \
--new-bucket restored-bucket \
--org my-org \
--token YOUR_TOKEN
3.2 恢复选项 #
bash
# 跳过已有数据
influx restore /path/to/backup \
--org my-org \
--token YOUR_TOKEN \
--skip-existing
# 强制覆盖
influx restore /path/to/backup \
--org my-org \
--token YOUR_TOKEN \
--force
# 恢复元数据
influx restore /path/to/backup \
--org my-org \
--token YOUR_TOKEN \
--full
四、API备份 #
4.1 使用API备份 #
bash
# 备份Bucket
curl -X POST "http://localhost:8086/api/v2/buckets/BUCKET_ID/backup" \
--header "Authorization: Token YOUR_TOKEN" \
--output backup.tar.gz
# 下载备份
curl -X GET "http://localhost:8086/api/v2/backup/BACKUP_ID" \
--header "Authorization: Token YOUR_TOKEN" \
--output backup.tar.gz
五、自动化备份 #
5.1 备份脚本 #
bash
#!/bin/bash
# backup_influxdb.sh
# 配置
INFLUX_URL="http://localhost:8086"
INFLUX_TOKEN="YOUR_TOKEN"
INFLUX_ORG="my-org"
BACKUP_DIR="/backup/influxdb"
RETENTION_DAYS=30
# 创建备份目录
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="${BACKUP_DIR}/${DATE}"
mkdir -p "$BACKUP_PATH"
# 执行备份
echo "开始备份: $DATE"
influx backup "$BACKUP_PATH" \
--host "$INFLUX_URL" \
--org "$INFLUX_ORG" \
--token "$INFLUX_TOKEN" \
--compress
# 检查备份结果
if [ $? -eq 0 ]; then
echo "备份成功: $BACKUP_PATH"
else
echo "备份失败"
exit 1
fi
# 清理旧备份
find "$BACKUP_DIR" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;
echo "清理完成"
# 上传到远程存储(可选)
# aws s3 sync "$BACKUP_PATH" s3://my-bucket/influxdb-backup/$DATE/
5.2 定时任务 #
bash
# 添加到crontab
crontab -e
# 每天凌晨2点执行全量备份
0 2 * * * /path/to/backup_influxdb.sh >> /var/log/influxdb-backup.log 2>&1
# 每小时执行增量备份
0 * * * * /path/to/incremental_backup.sh >> /var/log/influxdb-incremental.log 2>&1
5.3 增量备份脚本 #
bash
#!/bin/bash
# incremental_backup.sh
INFLUX_URL="http://localhost:8086"
INFLUX_TOKEN="YOUR_TOKEN"
INFLUX_ORG="my-org"
BACKUP_DIR="/backup/influxdb/incremental"
LAST_BACKUP_FILE="/backup/influxdb/.last_backup_time"
# 获取上次备份时间
if [ -f "$LAST_BACKUP_FILE" ]; then
SINCE=$(cat "$LAST_BACKUP_FILE")
else
SINCE=$(date -d "1 hour ago" +%s)
fi
# 创建备份目录
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="${BACKUP_DIR}/${DATE}"
mkdir -p "$BACKUP_PATH"
# 执行增量备份
influx backup "$BACKUP_PATH" \
--host "$INFLUX_URL" \
--org "$INFLUX_ORG" \
--token "$INFLUX_TOKEN" \
--since "$SINCE"
# 更新备份时间
date +%s > "$LAST_BACKUP_FILE"
echo "增量备份完成: $BACKUP_PATH"
六、恢复流程 #
6.1 标准恢复流程 #
text
恢复步骤:
1. 停止InfluxDB服务
└── systemctl stop influxdb
2. 备份当前数据(可选)
└── cp -r /var/lib/influxdb2 /var/lib/influxdb2.bak
3. 执行恢复命令
└── influx restore /path/to/backup
4. 验证数据完整性
└── influx query 'from(bucket: "my-bucket") |> range(start: -1d)'
5. 重启服务
└── systemctl start influxdb
6.2 灾难恢复 #
bash
#!/bin/bash
# disaster_recovery.sh
# 停止服务
systemctl stop influxdb
# 备份当前损坏的数据
mv /var/lib/influxdb2 /var/lib/influxdb2.corrupted
# 从备份恢复
influx restore /backup/influxdb/latest \
--full \
--force
# 启动服务
systemctl start influxdb
# 验证
influx ping
influx bucket list
七、备份验证 #
7.1 验证备份完整性 #
bash
# 检查备份文件
ls -la /path/to/backup
# 验证备份内容
tar -tzf backup.tar.gz
# 测试恢复(到测试环境)
influx restore /path/to/backup \
--new-bucket test-restore \
--org test-org
7.2 数据验证脚本 #
bash
#!/bin/bash
# verify_backup.sh
BACKUP_PATH=$1
# 创建临时组织
TEST_ORG="test-restore-$(date +%s)"
influx org create --name "$TEST_ORG"
# 恢复到临时Bucket
influx restore "$BACKUP_PATH" \
--org "$TEST_ORG" \
--new-bucket "test-bucket"
# 验证数据
RECORD_COUNT=$(influx query 'from(bucket: "test-bucket") |> range(start: -30d) |> count()' --org "$TEST_ORG" | wc -l)
if [ "$RECORD_COUNT" -gt 0 ]; then
echo "备份验证成功: 找到 $RECORD_COUNT 条记录"
else
echo "备份验证失败: 未找到数据"
fi
# 清理
influx org delete --name "$TEST_ORG"
八、云存储备份 #
8.1 AWS S3备份 #
bash
#!/bin/bash
# backup_to_s3.sh
BACKUP_DIR="/tmp/influxdb-backup"
S3_BUCKET="s3://my-bucket/influxdb-backup"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份
influx backup "$BACKUP_DIR" \
--org my-org \
--compress
# 上传到S3
aws s3 cp "$BACKUP_DIR.tar.gz" "$S3_BUCKET/$DATE.tar.gz"
# 清理本地备份
rm -f "$BACKUP_DIR.tar.gz"
echo "备份已上传到: $S3_BUCKET/$DATE.tar.gz"
8.2 自动备份策略 #
text
备份保留策略:
本地备份
├── 保留7天
├── 每日备份
└── 快速恢复
S3备份
├── 保留30天
├── 每日备份
└── 异地容灾
Glacier归档
├── 保留1年
├── 每周备份
└── 长期保存
九、最佳实践 #
9.1 备份建议 #
text
备份最佳实践:
频率
├── 生产环境:每日全量 + 每小时增量
├── 开发环境:每周全量
└── 关键数据:实时复制
存储
├── 本地存储:快速恢复
├── 远程存储:异地容灾
└── 多副本:高可用
验证
├── 定期验证备份
├── 测试恢复流程
└── 记录恢复时间
9.2 恢复建议 #
text
恢复最佳实践:
准备
├── 文档化恢复流程
├── 定期演练
└── 监控恢复时间
执行
├── 先备份当前状态
├── 选择合适的备份版本
└── 验证数据完整性
后续
├── 记录恢复过程
├── 分析故障原因
└── 改进备份策略
十、总结 #
备份与恢复要点:
- 定期备份:根据数据重要性设置备份频率
- 多种备份:全量+增量,本地+远程
- 验证备份:定期测试恢复流程
- 自动化:使用脚本和定时任务
- 文档化:记录备份恢复流程
下一步,让我们学习监控运维!
最后更新:2026-03-27