下面给出一套在 Docker 环境中将 TDengine 2.6 平滑迁移到 3.0的实战方案。核心原则:<span style="color:red">不做原地覆盖升级、先备份、可回滚</span>。思路务实、步骤可复用,适合单机与小规模集群场景。🚀


一、迁移总览(结论先行)

  • <span style="color:red">2.6 → 3.0 不支持就地升级</span>,采用 导出(taosdump)→ 新集群 → 导入 的“旁路迁移”策略。
  • 先用 2.6 的 taosdump 全量导出,启 3.0 新容器(新卷),再用 3.0 的 taosdump 导入。
  • <span style="color:red">客户端与驱动需同时升级</span>(JDBC/taosc/REST),避免协议不兼容。
  • 迁移窗口内,应用侧建议短暂“只写队列/缓写”,迁移完成后补写或回放增量。

二、标准流程(可直接执行)

1)准备 Docker 卷与网络

# 创建独立网络与数据卷(避免与2.6混用)
docker network create tdnet
docker volume create taos2_dump
docker volume create taos3_data
docker volume create taos3_cfg
docker volume create taos3_log

解释:独立网络便于容器间解析与隔离;单独卷确保<span style="color:red">数据与配置物理隔离</span>,防误覆盖。

2)在 2.6 容器中全量导出

# 进入2.6容器(名称示例:td26)
docker exec -it td26 bash

# 使用2.6自带的 taosdump 全量导出所有数据库
taosdump --all-databases -o /dump/full_$(date +%F_%H%M)

# 也可按库导出(示例导出 db_iot 与 db_log)
# taosdump -D db_iot -D db_log -o /dump/sel_$(date +%F_%H%M)

exit

# 将导出目录绑定到卷(如2.6容器的 /dump 已映射到 taos2_dump)
docker run --rm -it \
  -v taos2_dump:/dump \
  alpine ls -lah /dump

解释:必须用 2.6 的 taosdump(与源端完全兼容),--all-databases 会连同表结构、标签、权限等信息一起导出到可移植文件。导出后用 ls 校验文件存在与大小。

3)启动全新 3.0 容器

# 以单节点为例(生产请按需设定 FQDN/EP/角色等)
docker run -d --name td30 \
  --network tdnet \
  -p 6030:6030 -p 6041:6041 \
  -e TAOS_FQDN=td30 \
  -e TAOS_FIRST_EP=td30:6030 \
  -e TAOS_RETENTION_PERIOD=3650 \
  -v taos3_data:/var/lib/taos \
  -v taos3_cfg:/etc/taos \
  -v taos3_log:/var/log/taos \
  -v taos2_dump:/dump:ro \
  tdengine/tdengine:3.0

解释:使用 3.0 官方镜像;映射 6030(服务)与 6041(REST);把 2.6 的导出卷只读挂载到 /dump,<span style="color:red">防止误改备份</span>。

4)在 3.0 容器中执行导入

docker exec -it td30 bash

# 登录验证
taos -s "SHOW DATABASES;"

# 使用3.0版本 taosdump 导入(支持从2.6导出的文件)
taosdump -i /dump/full_YYYY-MM-DD_HHMM

# 或导入选择性备份
# taosdump -i /dump/sel_YYYY-MM-DD_HHMM

exit

解释:3.0 的 taosdump 具备向后导入能力。导入会按导出中的元数据恢复库、超级表、子表、标签和值。

5)一致性与性能校验(强制执行)

# 行数对比(示例:db_iot)
docker exec -it td26 taos -s "SELECT COUNT(*) FROM db_iot.st_sensordata;"
docker exec -it td30 taos -s "SELECT COUNT(*) FROM db_iot.st_sensordata;"

# 关键查询延迟/索引验证
docker exec -it td30 taos -s "
USE db_iot;
SELECT TBNAME, COUNT(*) AS c FROM st_sensordata GROUP BY TBNAME ORDER BY c DESC LIMIT 5;
"

解释:对比核心表行数与样本查询结果,确认<span style="color:red">无丢无重</span>;如使用纳秒级时间戳,请验证时间精度与边界值。

6)业务切换与回滚预案

  • 切换:更新应用连接串指向 3.0(主机、端口、用户),并同步升级客户端驱动(JDBC/taosc/REST SDK)。
  • 回滚:若校验不通过,停止写入、回指 2.6,问题修复后重新导入。因为<span style="color:red">全程未覆盖旧卷</span>,回退零成本。

三、关键差异与常见坑(务必关注)

  • 时间精度:3.0 支持更高精度时间戳(纳秒)。导入后检查时间列是否存在精度变化导致的范围过滤差异。
  • 语法与特性:部分函数与系统表字段在 3.0 有调整;建议对依赖系统表结构的运维脚本做<span style="color:red">回归测试</span>。
  • 权限模型:若 2.6 存在多用户与授权策略,确认 taosdump 导出的 DDL 中包含 CREATE USER/GRANT,导入后抽查权限是否生效。
  • 适配层:REST 6041 端口不变,但 3.0 的适配器/驱动实现有更新,老版本客户端可能出现“连接成功但查询异常”的伪健康状态。
  • 写入停顿:迁移窗口建议应用改为“落本地队列/消息中间件”,迁移完成后回放,避免跨版本双写导致幂等问题。

四、对比与原理说明表(支持 WordPress 经典编辑器 / vditor)

维度2.6 做法3.0 做法迁移影响风险级别
升级方式原地不可行旁路新集群需导出/导入<span style="color:red">高</span>
导出工具taosdump(2.6)taosdump(3.0) 导入官方兼容
时间精度毫秒为主支持纳秒过滤条件需复核
客户端老驱动<span style="color:red">升级驱动</span>否则报错/性能异常
回滚复杂<span style="color:red">简单(未覆盖旧卷)</span>快速恢复

五、最小可用 docker-compose(单机示例)

version: "3.8"
services:
  td30:
    image: tdengine/tdengine:3.0
    container_name: td30
    network_mode: bridge
    environment:
      - TAOS_FQDN=td30
      - TAOS_FIRST_EP=td30:6030
    ports:
      - "6030:6030"   # 服务端口
      - "6041:6041"   # REST API
    volumes:
      - taos3_data:/var/lib/taos     # 数据:全新卷,避免覆盖老数据
      - taos3_cfg:/etc/taos          # 配置:便于持久化与纳管
      - taos3_log:/var/log/taos      # 日志:问题现场可追溯
      - taos2_dump:/dump:ro          # 2.6 导出文件(只读)
volumes:
  taos3_data:
  taos3_cfg:
  taos3_log:
  taos2_dump:

解释:compose 只演示 3.0;2.6 环境保留,确保<span style="color:red">可回滚</span>。生产中如为集群,请先按官方拓扑起 mnode,再扩 vnode,最后导入。


六、文字版流程图(vditor/Markdown 友好)

[准备卷与网络]
      ↓
[2.6 taosdump 全量导出]
      ↓
[启动 3.0 新容器/新卷]
      ↓
[3.0 taosdump 导入数据]
      ↓
[一致性校验 + 性能抽测]
      ↓
[升级客户端驱动/切流]
      ↓
[观察窗口 & 可回滚]

七、质量保障清单(上线前最后一公里)✅

  • <span style="color:red">数据一致性</span>:核心超级表行数、时间范围、样本校验 3/3 通过。
  • <span style="color:red">关键查询</span>:TOPN、区间聚合、标签过滤命中正确。
  • <span style="color:red">写入延迟</span>:与 2.6 同量级或更优;批写参数与缓存大小按 3.0 默认或调优。
  • <span style="color:red">应用联调</span>:驱动升级后无异常告警,REST/JDBC/原生连接均通过。
  • <span style="color:red">回滚脚本</span>:指向 2.6 的连接配置与容器脚本可一键恢复。

一句话复盘:把迁移当成“新建 3.0 集群 + 数据搬家”的工程项目来做,<span style="color:red">先备份、再导入、后切流、保回滚</span>,你会收获一个稳定、可追溯、结果可控的升级过程。🛠️📈

需要我按你的实际库名与容器名生成“一键导出/导入脚本”,我可以直接给出可执行版。


蓝易云
39 声望7 粉丝

蓝易云高防服务器:www.tsyvps.com