备份与恢复 #

一、备份概述 #

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
恢复最佳实践:

准备
├── 文档化恢复流程
├── 定期演练
└── 监控恢复时间

执行
├── 先备份当前状态
├── 选择合适的备份版本
└── 验证数据完整性

后续
├── 记录恢复过程
├── 分析故障原因
└── 改进备份策略

十、总结 #

备份与恢复要点:

  1. 定期备份:根据数据重要性设置备份频率
  2. 多种备份:全量+增量,本地+远程
  3. 验证备份:定期测试恢复流程
  4. 自动化:使用脚本和定时任务
  5. 文档化:记录备份恢复流程

下一步,让我们学习监控运维!

最后更新:2026-03-27