分类:12.运维 |篇章:04 备份与恢复
免费详情
数据备份是生产环境的必备能力。TDengine 提供 taosdump(开源工具,逻辑备份)和企业版备份方案(物理备份/增量备份)。本文涵盖备份策略、恢复流程、迁移场景。
备份方式速查
| 方式 | 类型 | 粒度 | 适用 |
|---|---|---|---|
| taosdump | 逻辑(SQL) | 库/表 | 通用迁移 |
| 物理备份(企业版) | 物理(文件) | 集群 | 完整备份 |
| 副本(REPLICA=3) | 实时 | 集群 | 高可用 |
| 流计算/订阅 | 实时复制 | 库 | 异地灾备 |
详细解析
1. 副本机制(不是真正备份,但是 HA 基础)
REPLICA 副本: 建库时设 REPLICA 3 数据实时复制到 3 个节点 单节点故障自动切换 局限性: - 不防误删/误改(同步复制) - 不防整集群灾难 - 不能跨集群 结论: REPLICA 是高可用,不是备份 生产必须 REPLICA + 备份双保险2. taosdump 备份
# 备份整个数据库taosdump-hlocalhost-P6030-uroot-ptaosdata\-Dmydb\-o/backup/mydb_$(date+%Y%m%d)# 备份特定超级表taosdump-hlocalhost-Dmydb\-Nmeters\-o/backup/meters_$(date+%Y%m%d)# 备份多个数据库taosdump-hlocalhost-Ddb1,db2,db3\-o/backup/multi_$(date+%Y%m%d)# 按时间范围taosdump-hlocalhost-Dmydb\-S'2026-06-01 00:00:00'\-E'2026-06-30 23:59:59'\-o/backup/june_2026# 仅 schema 不含数据taosdump-hlocalhost-Dmydb\--schema-only\-o/backup/schema_$(date+%Y%m%d)# 并发线程taosdump-hlocalhost-Dmydb\-T8\# 8 线程-o/backup/mydb3. taosdump 恢复
# 恢复(导入)taosdump-hnewhost-P6030-uroot-ptaosdata\-i/backup/mydb_20260604# 仅恢复 schemataosdump-hnewhost\-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. 准备测试集群dockerrun-d--nametd-test\-p6042:6030-p6042:6041\tdengine/tdengine:latest# 2. 恢复最新备份LATEST=$(ls-t/backup/mydb_*.tar.gz|head-1)tarxzf$LATEST-C/tmp/restore taosdump-hlocalhost-P6042-i/tmp/restore# 3. 数据验证EXPECTED=$(taos-hprod-host-s"SELECT COUNT(*) FROM mydb.meters"|tail-1)ACTUAL=$(taos-hlocalhost-P6042-s"SELECT COUNT(*) FROM mydb.meters"|tail-1)if["$EXPECTED"="$ACTUAL"];thenecho"✓ Restore drill passed"elseecho"✗ Counts differ: expected=$EXPECTED, actual=$ACTUAL"exit1fi# 4. 清理dockerrm-ftd-test7. 跨集群迁移
场景:旧集群 → 新集群迁移 方式 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.shset-eDATE=$(date+%Y%m%d_%H%M%S)BACKUP_DIR=/backup/tdengine/$DATELOG=/var/log/td_backup.logRETAIN_DAYS=30mkdir-p$BACKUP_DIRecho"[$(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}')fordbin$DATABASES;doecho" Backing up$db..."taosdump-D$db-o$BACKUP_DIR/$db-T4>>$LOG2>&1done# 压缩tarczf$BACKUP_DIR.tar.gz-C/backup/tdengine$DATErm-rf$BACKUP_DIR# 上传到对象存储aws s3cp$BACKUP_DIR.tar.gz s3://my-backup/tdengine/# 清理旧备份find/backup/tdengine-name"*.tar.gz"-mtime+$RETAIN_DAYS-deleteecho"[$(date)] Backup completed">>$LOGcrontab 定时
# /etc/crontab02* * * 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 最佳实践》
预聚合
- 01-《TDengine RSMA》
- 02-《TDengine TSMA — 时间维度的物化聚合视图》
- 03-《TDengine SMA 内部实现》
索引
- 01-《TDengine Tag 索引》
- 02-《TDengine SMA 索引》
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# 连接器》
运维
- 01-《TDengine 部署指南》
- 02-《TDengine 配置详解》
- 03-《TDengine 监控系统》
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。