InfluxDB2 在 docker 环境下部署,以及备份还原

InfluxDB 2 在 Docker 环境下的部署及备份还原

环境:Docker  |  版本:InfluxDB v2(influxdb:2.1.1)


一、部署

使用 docker-compose 部署:

influxdb:
  image: influxdb:2.1.1
  container_name: influxdb
  restart: always
  ports:
    - "8086:8086"
  environment:
    - DOCKER_INFLUXDB_INIT_USERNAME=admin
    - DOCKER_INFLUXDB_INIT_PASSWORD=123456
    - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=lLkuOfp21S_mzUo9N83rDI2VdWv-nxWMSL2JhBxhRTazlXrQi3TMycY3sKJjL6gt2yBctPHABbS6TWqJrcOciw==
  volumes:
    - D:\DockerMapping\data_influxdb2\data:/var/lib/influxdb2
    - D:\DockerMapping\data_influxdb2\back:/back
  privileged: true

说明

  • data 目录用于持久化 InfluxDB 数据。
  • back 目录用于挂载备份文件(容器内路径 /back)。
  • privileged: true 一般非必需,除非有特殊挂载 / 权限需求。

二、访问与初始化

项目 值
Web UI http://localhost:8086
Organization crdc
初始密码 123456
Bucket railmap

1. 数据查询

进入 Explore → 选择日期范围 → 选择 Bucket 即可查看数据。

数据查询

2. 获取 Token

Web UI 路径:Data → API Tokens → Generate API Token → All Access API Token

获取 Token

3. 修改密码(可选)

先进入容器,再执行:

influx user password --name admin \
  --token "74Fp6ixViPXsrgJGVtD2XcO6611Of0LyhQLogV_wSO1Z2puoDMVKY2bQBcS3vHRFze3_gNHkW7xunXGLtTKdZg=="

三、备份数据

进入容器:

docker exec -it influxdb /bin/bash

执行备份(文件名按时间戳自动生成):

influx backup /back/out/influxdb_backup_$(date '+%Y-%m-%d_%H-%M') \
  --host http://localhost:8086 \
  --org crdc \
  --token OcG-XH9iuhxHpMuNZZkrFzlIrfHb5Y86wjpfbVUJqn5WOpGjyry9fo7BHSpyogBP3tIvSsiZXcMk9KDktwHZKA==

四、还原数据

重要提示

InfluxDB 2.x 的 influx restore 不支持覆盖已存在的 Bucket,因此必须先删除目标 Bucket,再执行还原。

1. 查看 Bucket 列表

# 查看当前所有 bucket,确认 railmap 的 ID
influx bucket list \
  --host http://localhost:8086 \
  --token zP8GBQrY8LaCWvirW0K584xT3QcBdTtIyTutZOM7LW1viY_8RnCRT_0gy11YGb-RjH2lm0yZ6WlYYO7UVGjOGg== \
  --org crdc

2. 删除已有 Bucket

# 删除 railmap bucket
influx bucket delete \
  --host http://localhost:8086 \
  --token zP8GBQrY8LaCWvirW0K584xT3QcBdTtIyTutZOM7LW1viY_8RnCRT_0gy11YGb-RjH2lm0yZ6WlYYO7UVGjOGg== \
  --org crdc \
  --name railmap

3. 执行还原

# 再执行恢复
influx restore \
  --host http://localhost:8086 \
  --token zP8GBQrY8LaCWvirW0K584xT3QcBdTtIyTutZOM7LW1viY_8RnCRT_0gy11YGb-RjH2lm0yZ6WlYYO7UVGjOGg== \
  --org crdc \
  --bucket railmap \
  /back/influxdb-back-20260601

五、常见错误排查

错误信息 原因 解决方案
422 Unprocessable Entity: bucket with name railmap already exists 目标 Bucket 已存在,restore 不支持覆盖 先 bucket delete 再 restore
authorization not found Token 无效或权限不足 重新生成 All Access Token
connection refused 容器内 localhost 不可达 检查容器网络或改用容器名

六、安全建议

  • 文中示例使用的 Admin Token、密码均为演示值,请勿直接用于生产环境。
  • 建议定期轮换 Admin Token 与用户密码。
  • 备份文件建议额外同步到异地存储,避免单点丢失。
  • 生产环境建议关闭 privileged,并按最小权限原则挂载卷。

七、常用 Flux 查询语句

以下语句可直接在 InfluxDB Web UI 的 Explore / Script Editor 中执行,Bucket 为 railmap,Measurement 为 sensor。

1. 查询总条数

from(bucket: "railmap")
  |> range(start: 1970-01-01T00:00:00Z)
  |> filter(fn: (r) => r._measurement == "sensor")
  |> group()
  |> count()
  |> limit(n: 1)

查询总条数

2. 查询所有日期(去重、降序)

from(bucket: "railmap")
  |> range(start: 1970-01-01T00:00:00Z)
  |> filter(fn: (r) => r._measurement == "sensor")
  |> keep(columns: ["_time"])
  |> truncateTimeColumn(unit: 1d)
  |> distinct(column: "_time")
  |> sort(columns: ["_time"], desc: true)

查询所有日期

3. 查询第一个日期与最后一个日期

first = from(bucket: "railmap")
  |> range(start: 1970-01-01T00:00:00Z)
  |> filter(fn: (r) => r._measurement == "sensor")
  |> keep(columns: ["_time"])
  |> sort(columns: ["_time"], desc: false)
  |> limit(n: 1)

last = from(bucket: "railmap")
  |> range(start: 1970-01-01T00:00:00Z)
  |> filter(fn: (r) => r._measurement == "sensor")
  |> keep(columns: ["_time"])
  |> sort(columns: ["_time"], desc: true)
  |> limit(n: 1)

union(tables: [first, last])

查询首尾日期

posted @ 2026-09-15 16:44  无心々菜  阅读(14)  评论(0)    收藏  举报