下面給出一套在 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>,你會收穫一個穩定、可追溯、結果可控的升級過程。🛠️📈
需要我按你的實際庫名與容器名生成“一鍵導出/導入腳本”,我可以直接給出可執行版。