下面给出一套在 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>,你会收获一个稳定、可追溯、结果可控的升级过程。🛠️📈
需要我按你的实际库名与容器名生成“一键导出/导入脚本”,我可以直接给出可执行版。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。