分类:12.运维 | 篇章:04 备份与恢复
免费详情
数据备份是生产环境的必备能力。TDengine 提供 taosdump(开源工具,逻辑备份)和企业版备份方案(物理备份/增量备份)。本文涵盖备份策略、恢复流程、迁移场景。
备份方式速查
| 方式 | 类型 | 粒度 | 适用 |
|---|---|---|---|
| taosdump | 逻辑(SQL) | 库/表 | 通用迁移 |
| 物理备份(企业版) | 物理(文件) | 集群 | 完整备份 |
| 副本(REPLICA=3) | 实时 | 集群 | 高可用 |
| 流计算/订阅 | 实时复制 | 库 | 异地灾备 |
详细解析
1. 副本机制(不是真正备份,但是 HA 基础)
REPLICA 副本:
建库时设 REPLICA 3
数据实时复制到 3 个节点
单节点故障自动切换
局限性:
- 不防误删/误改(同步复制)
- 不防整集群灾难
- 不能跨集群
结论:
REPLICA 是高可用,不是备份
生产必须 REPLICA + 备份双保险
2. taosdump 备份
# 备份整个数据库
taosdump -h localhost -P 6030 -u root -p taosdata \
-D mydb \
-o /backup/mydb_$(date +%Y%m%d)
# 备份特定超级表
taosdump -h localhost -D mydb \
-N meters \
-o /backup/meters_$(date +%Y%m%d)
# 备份多个数据库
taosdump -h localhost -D db1,db2,db3 \
-o /backup/multi_$(date +%Y%m%d)
# 按时间范围
taosdump -h localhost -D mydb \
-S '2026-06-01 00:00:00' \
-E '2026-06-30 23:59:59' \
-o /backup/june_2026
# 仅 schema 不含数据
taosdump -h localhost -D mydb \
--schema-only \
-o /backup/schema_$(date +%Y%m%d)
# 并发线程
taosdump -h localhost -D mydb \
-T 8 \ # 8 线程
-o /backup/mydb
3. taosdump 恢复
# 恢复(导入)
taosdump -h newhost -P 6030 -u root -p taosdata \
-i /backup/mydb_20260604
# 仅恢复 schema
taosdump -h newhost \
-i /backup/mydb_20260604 \
--schema-only
# 跨版本恢复
# taosdump 通常向前兼容(旧数据可导入新版)
# 不保证向后(新版数据导入旧版)
4. 物理备份(企业版)
企业版工具:
taosdump
- 全量物理备份
- 增量备份
- 时间点恢复 (PITR)
# 全量备份
taosdump -d /var/lib/taos -o /backup/full_20260604
# 增量备份
taosdump -d /var/lib/taos -o /backup/incr_20260605 \
--incremental --base /backup/full_20260604
# 恢复
taosdump -i /backup/full_20260604 -o /var/lib/taos
性能:
- 物理备份比逻辑快 10x+
- 增量大幅减少存储
- 支持热备份(不停服)
5. 备份策略
推荐备份策略:
① 每日全量(小规模):
- cron 凌晨 taosdump
- 保留 7~30 天
- 异地复制
② 每周全量 + 每日增量(中规模,企业版):
- 周日全量
- 每日增量
- PITR 能力
③ 持续复制 + 定期全量(大规模):
- 流计算/订阅实时复制
- 周期 taosdump 异地
- 多地多备
存储分级:
- 本地 SSD:最近 7 天
- 本地 HDD:1 个月
- 对象存储 S3/OSS:长期归档
6. 恢复演练
#!/bin/bash
# 定期恢复演练(每月)
# 1. 准备测试集群
docker run -d --name td-test \
-p 6042:6030 -p 6042:6041 \
tdengine/tdengine:latest
# 2. 恢复最新备份
LATEST=$(ls -t /backup/mydb_*.tar.gz | head -1)
tar xzf $LATEST -C /tmp/restore
taosdump -h localhost -P 6042 -i /tmp/restore
# 3. 数据验证
EXPECTED=$(taos -h prod-host -s "SELECT COUNT(*) FROM mydb.meters" | tail -1)
ACTUAL=$(taos -h localhost -P 6042 -s "SELECT COUNT(*) FROM mydb.meters" | tail -1)
if [ "$EXPECTED" = "$ACTUAL" ]; then
echo "✓ Restore drill passed"
else
echo "✗ Counts differ: expected=$EXPECTED, actual=$ACTUAL"
exit 1
fi
# 4. 清理
docker rm -f td-test
7. 跨集群迁移
场景:旧集群 → 新集群迁移
方式 1: taosdump 物理迁移
taosdump -h old-cluster -D mydb -o /migrate
taosdump -h new-cluster -i /migrate
方式 2: 双写过渡
① 应用同时写入新旧集群
② taosdump 迁移历史
③ 验证数据一致
④ 切流量到新集群
⑤ 停止旧集群
方式 3: TMQ 订阅同步
① 新集群订阅旧集群
② taosdump 历史
③ 实时增量持续同步
④ 切流量
跨版本迁移:
- 旧版本 → 新版本:直接 taosdump 通常 OK
- 新版本 → 旧版本:可能不兼容
8. 灾备方案
方案 A: 主备数据中心
┌─────────────┐ ┌─────────────┐
│ DC1 主集群 │ ──►│ DC2 备集群 │
│ REPLICA=3 │ │ REPLICA=3 │
└─────────────┘ └─────────────┘
▲
同步方式:
- taosX(推荐)
- 流计算 + 写入
- 定期 taosdump
方案 B: 异地三副本(成本高)
跨 DC REPLICA=3
网络延迟影响写入
方案 C: 业务双写
应用层同时写两个集群
无引擎复制开销
代码示例
自动化备份脚本
#!/bin/bash
# /usr/local/bin/td_backup.sh
set -e
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/backup/tdengine/$DATE
LOG=/var/log/td_backup.log
RETAIN_DAYS=30
mkdir -p $BACKUP_DIR
echo "[$(date)] Backup start" >> $LOG
# 备份所有用户数据库(排除系统)
DATABASES=$(taos -s "SHOW DATABASES" | grep -v "^name" | \
grep -v "log" | grep -v "performance_schema" | \
grep -v "information_schema" | awk '{print $1}')
for db in $DATABASES; do
echo " Backing up $db..."
taosdump -D $db -o $BACKUP_DIR/$db -T 4 >> $LOG 2>&1
done
# 压缩
tar czf $BACKUP_DIR.tar.gz -C /backup/tdengine $DATE
rm -rf $BACKUP_DIR
# 上传到对象存储
aws s3 cp $BACKUP_DIR.tar.gz s3://my-backup/tdengine/
# 清理旧备份
find /backup/tdengine -name "*.tar.gz" -mtime +$RETAIN_DAYS -delete
echo "[$(date)] Backup completed" >> $LOG
crontab 定时
# /etc/crontab
0 2 * * * root /usr/local/bin/td_backup.sh
性能考量
备份性能
| 数据量 | taosdump 耗时(参考) |
|---|---|
| 1 GB | 1~5 分钟 |
| 10 GB | 10~30 分钟 |
| 100 GB | 1~5 小时 |
| 1 TB | 10~30 小时 |
调优:
- 增加线程
-T 8(注意 CPU 占用) - 选低峰时间
- 多机分库并行
恢复性能
类似备份。注意:
- 大表恢复内存使用大
- 索引/SMA 重建耗 CPU
- 推荐先恢复 schema 再分批数据
FAQ
Q1: 必须停服才能备份吗?
不需要。taosdump 在线备份,但备份时数据可能仍在写入。可以接受最后几秒的不一致。
Q2: taosdump 备份大小怎么估算?
约为原始数据的 10%~30%(视压缩率)。SQL 文本形式比物理大但可压缩。
Q3: 备份能跨集群恢复吗?
可以。taosdump 输出是 SQL,可恢复到任何 TDengine 集群(注意版本兼容)。
Q4: 增量备份开源版有吗?
开源 taosdump 仅全量。增量需企业版或通过时间范围切分。
Q5: 灾备 RTO/RPO 怎么定?
- 业务可容忍中断:RTO 4 小时,RPO 1 小时
- 关键业务:RTO 30 分钟,RPO 5 分钟
- 金融级:RTO 5 分钟,RPO 接近 0(需企业方案)
参考
系统构架篇
- 01-《TDengine 整体架构全景》
- 02-《集群拓扑深度解析》
- 03-《MNode 内部机制深度解析》
- 04-《RPC 通信层深度解析》
- 05-《VNode 生命周期》
- 06-《RAFT 共识协议》
- 07-《端到端的消息流》
数据模型
- 01-《数据库创建与参数详解》
- 02-《超级表/子表/普通表》
- 03-《支持数据类型深度解析》
- 04-《TDengine Tag 设计哲学与 Schema 变更机制》
- 05-《TDengine 虚拟表实现原理》
存储引擎
- 01-《TDengine 存储引擎概览》
- 02-《TDengine MemTable 深度解析》
- 03-《TDengine WAL 预写日志机制》
- 04-《TDengine 数据文件格式》
- 05-《TDengine Commit 与 Flush 机制 》
- 06-《TDengine Compaction 合并策略 》
- 07-《TDengine 数据保留与 TTL》
- 08-《TDengine 压缩编码机制》
- 09-《TDengine Cache 与 Last 查询加速》
- 10-《TDengine 逻辑计划生成》
查询引擎
- 01-《TDengine 查询引擎概览》
- 02-《TDengine SQL 解析与词法分析》
- 03-《TDengine 语义分析与 AST 重写》
- 04-《TDengine 逻辑计划生成》
- 05-《TDengine 物理计划生成》
- 06-《TDengine 扫描算子》
- 07-《TDengine 聚合算子》
- 08-《TDengine 连接算子》
- 09-《TDengine 排序、填充与投影》
- 10-《TDengine 分布式查询执行》
- 11-《TDengine EXPLAIN 与查询优化》
数据写入
- 01-《TDengine SQL INSERT》
- 02-《TDengine 无模式写入》
- 03-《TDengine STMT 写入》
- 04-《TDengine 写入内部流程》
- 05-《TDengine 数据更新删除》
数据订阅
- 01-《TDengine 数据订阅》
- 02-《TDengine 订阅 vs Kafka》
- 03-《TDengine TMQ 消费流程》
- 04-《TDengine 内部机制》
- 05-《TDengine TMQ 最佳实践》
预聚合
索引
SQL 语句
- 01-《TDengine DDL》
- 02-《TDengine DML SELECT》
- 03-《TDengine DML 函数完整参考》
- 04-《TDengine JOIN 完整语法》
- 05-《TDengine 窗口完整语法》
- 06-《TDengine 操作符与表达式》
- 07-《TDengine 系统表》
- 08-《TDengine SQL 与标准 SQL 差异》
客户端与连接器
- 01-《TDengine 的连接方式》
- 02-《TDengine C/C++ 连接器》
- 03-《TDengine java 连接器》
- 04-《TDengine Python 连接器》
- 05-《TDengine Go 与 Rust 连接器》
- 06-《TDengine Node.js 与 C# 连接器》
运维
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。


1462

被折叠的 条评论
为什么被折叠?



