一旦数据丢失,系统崩溃带来的可能不仅是业务中断,更可能是不可逆的损失。如何做到“有备无患”?时序数据库 TDengine 提供了四种覆盖广泛场景的数据备份方案。本文将带你深入了解每种方法的特性与操作要点,教你选对备份策略,也能快速恢复数据。
数据备份工具 taosdump
taosdump 是 TDengine 社区版首选的数据备份工具(企业版同样支持),其核心特点是操作简便、支持多线程处理,且备份文件采用 Apache Avro 格式(大数据领域通用数据交换格式),便于向其他系统共享数据。工具支持跨平台连接远程服务器执行备份 / 恢复操作,兼容 Native、Restful、WebSocket 等多种连接协议。
优缺点分析:
- 优点:操作简单且社区版支持,导出格式为开放式 avro 格式。
- 缺点:功能选项相对基础,未覆盖复杂场景需求。
工具获取
随企业版 / 社区版安装包内置,无需额外下载。
备份操作
- 全库备份(包括系统库)
命令示例:taosdump -A -o /data/backup
(-
A 表示全库,-o
指定备份目录)。
- 指定备份库或表
支持单库多表备份,不支持多库。
命令示例:taosdump -D db01 -o /data/backup/db01
(-D
指定数据库名)。
- 指定时间段备份
支持按时间区间筛选数据,未指定则备份全量。
命令示例:taosdump -S '2024-01-01T00:00:00+0800' -E '2024-01-02T00:00:00+0800' -D db01 -o /data/backup/time_range
(-S
和 -E
分别指定起始和结束时间)。
- 指定线程备份
支持自定义线程加速备份,默认 8 线程。
命令示例:taosdump -T 32 -A -o /data/backup
(-T
表示备份线程数)。
- 只备份元数据
命令示例:taosdump -s -D db01 -o /data/backup/meta
(-s
表示仅元数据)。
恢复操作
- 全量恢复 命令示例:
taosdump -i /data/backup
(-i
指定备份目录,恢复所有数据)。 - 恢复时修改库名 命令示例:
taosdump -i /data/backup -W "db01=new_db01"
(将原库db01
恢复为new_db01
)。 - 指定线程恢复 命令示例:
taosdump -i /data/backup -T 16
(使用 16 线程加速恢复)。 - 指定数据库恢复 操作步骤:全库备份后,删除备份目录中不需要恢复的数据库文件夹(如
db02
),保留db01
文件夹,再执行taosdump -i /data/backup
,仅恢复db01
。 - 元数据恢复
若目标库表已存在,元数据不会覆盖,仅保留现有结构。
表结构有变动的备份/恢复
- TDengine 3.3.6.0 之前版本:若目标库表结构有变动(如增删列),直接恢复会失败。需通过 “旧备份导入新库→新库导出新备份→新备份导入目标库” 迂回恢复。
- TDengine 3.3.6.0 及之后版本:支持表结构增删列(列名不变仅类型修改仍不支持),恢复时新增列以
null
填充。
数据管道工具 taosX
taosX 是 TDengine 企业版专用的数据管道工具,定位为 “零代码数据集成平台”,核心功能覆盖数据接入、同步、备份、恢复及迁移。支持跨集群 / 实例的异步数据复制,可作为桥梁对接 TDengine 与第三方数据源(如关系型数据库、消息队列等)。
优缺点分析:
- 优点:功能全面(支持增量备份、断点续备等)、速度快、导出格式多样(CSV/Parquet 列存)。
- 缺点:社区版不支持、使用复杂度高。
工具获取
随企业版安装包内置,部分生态对接组件需单独安装。
核心功能
taosX 功能丰富,覆盖数据全生命周期管理,具体包括:
- 数据备份与恢复:支持增量备份 / 恢复(3.3.x + 版本支持图形化操作)、断点续备,备份文件格式支持 CSV 和 Parquet(列存)。
- 数据迁移与同步 :
- 支持基于订阅(TMQ)的实时数据同步(3.0 + 版本)和基于 SELECT 的历史数据迁移(2.4+/2.6+/3.0 + 版本)。
- 支持历史数据(history 模式)、实时数据(realtime 模式)、混合(both 模式)迁移。
- 任务支持进度保存,异常恢复后可续传。
- 跨集群复制 :支持数据库或(超级)表的全量 / 增量复制,可选择列级复制、模式(schema)复制,表名支持正则匹配。
- 外部数据源接入 :
- 关系型数据库:MySQL、Oracle、PostgreSQL、Microsoft SQL Server。
- 时序数据库:OpenTSDB、InfluxDB。
- 工业实时数据库:PI System、Aveva Historian。
- 消息队列:Kafka。
- 其他常见协议:OPC-UA/DA、MQTT。
- 数据转换(Transform):支持对输入流进行过滤、映射、聚合等处理,处理后数据流入目标端。
- 双活部署管理 :通过 taosx replica 系列命令管理主备集群同步任务,支持任务启动、停止、重启及进度查看 。
- 可视化操作 :可通过 taos-explorer(Web 界面)配置数据迁移任务、监控任务状态(如数据写入量、延时等)。
备份/恢复步骤:
一、备份步骤
- 配置备份任务参数(命令行方式)
- –from 参数 (源端配置):
auto.offset.reset=latest&experimental.snapshot.enable=false
:不备份历史数据,从当前 WAL 最新位置开始备份。upcoming
:指定下次执行备份任务的时间(如now
表示立即开始)。interval
:两次备份任务的间隔(如interval=60s
表示每 60 秒执行一次)。self.repeat=true
:开启持续重复调度。
- –to 参数 (目标端配置):
move.to
:备份文件写入完成后,移动到指定目录(如/data/send
)。
- 启动备份任务 使用
nohup
方式后台启动备份任务,示例命令(以跨隔离场景为例):
nohup taosx backup
--from "auto.offset.reset=latest
&experimental.snapshot.enable=false
&upcoming=now
&interval=60s
&self.repeat=true"
--to "move.to=/data/send"
> backup.log 2>&1 &
此命令会持续生成增量备份文件到本地路径,并在完成后移动至 /data/send/ 目录。
- 图形化操作(3.3.x + 版本) 通过
taos-explorer
(Web 界面,访问地址如http://<集群IP>:6060
)配置备份任务:- 进入 “系统管理 – 备份” 页面,点击 “新增备份”。
- 配置参数:备份周期(每天 / 每 7 天 / 每 30 天)、目标数据库(需
wal_retention_period>0
)、备份目录(如/root/data_backup
)。 - 点击 “确定” 后任务启动,支持监控任务状态(数据写入量、延时等)。
二、恢复步骤
- 配置恢复任务参数(命令行方式)
-
post_action=de
l :恢复完成后自动删除备份文件(避免重复恢复)。
-
- 启动恢复任务 在目标集群使用
nohup
启动恢复任务,示例命令:
nohup taosx restore --from "/data/receive" --post_action=del > restore.log 2>&1 &
此命令会监听接收目录(如/data/receive
),解析并写入增量备份文件到目标 TDengine 集群。
- 图形化操作(3.3.x + 版本) 在
taos-explorer
的 “系统管理 – 备份” 页面中:- 进入 “备份文件” 列表,选择需恢复的备份点。
- 点击 “数据恢复” 按钮,选择目标数据库后完成恢复。
数据库管理工具 taos-CLI
taos-CLI 工具是 TDengine 自带的数据库管理工具(社区版及企业版均支持),其备份及恢复功能主要通过 CSV 文件实现,工具适合小数据量临时备份场景,操作简单但性能有限,需结合实际需求选择使用。
优缺点分析:
- 优点:操作简单,可灵活备份任意查询结果(如特定子表、部分列或自定义查询结果)。
- 缺点:仅支持单线程操作,速度较慢,适用于小数据量的临时备份。
工具获取
taos-CLI 工具内置于 TDengine 社区版及企业版中,无需额外安装。
备份操作
备份时主要通过taos
命令行的重定向符号>>
将查询结果导出为 CSV 文件,支持以下场景:
- 子表整体备份 :直接导出子表的所有数据。 示例(导出子表
child_table
):
SELECT * FROM child_table >> /path/to/backup.csv
- 查询结果备份 :导出特定查询条件的结果(如时间范围、过滤条件)。 示例(导出 2025-06-01 至 2025-06-30 的数据):
SELECT * FROM sensor_data
WHERE ts BETWEEN '2025-06-01' AND '2025-06-30'
>> /path/to/query_backup.csv
- 部分列备份 :仅导出指定列的数据(适用于表结构变化大的迁移场景)。 示例(导出
id
和value
列):
SELECT id, valueFROM sensor_data >> /path/to/partial_columns_backup.csv
恢复操作
恢复时需注意删除 CSV 文件的第一行标题行(避免列名被误导入),并根据备份列数据类型选择对应语法:
- 子表整体恢复 :直接将 CSV 数据导入目标子表。 示例(导入到子表
child_table
):
INSERTINTO child_table FILE /path/to/backup.csv;
- 部分列恢复 :需明确指定目标表的列名,确保 CSV 文件的列顺序与指定列一致。 示例(导入到
target_table
的id
和value
列):
INSERTINTO target_table (id, value) FILE /path/to/partial_columns_backup.csv;
库文件备份
库文件备份是指直接备份 TDengine 中 dataDir
指向的数据库文件目录,属于整体备份方式,主要用于灾备场景(如 TDengine 无法启动时),类似于制作数据库镜像。
优缺点分析:
- 优点:不依赖于 TDengine 服务,备份速度快。
- 缺点:恢复时 TDengine 版本要与备份时保持一致,同时全部数据(包括元数据)只能整体恢复至备份时。
工具获取
无工具,使用系统 copy 命令。
备份操作
备份操作建议结合自动化脚本定期执行,以提升可靠性。
- 备份范围 :
- 不需要备份的文件夹 :WAL(预写日志)文件夹(通常较大,无需备份)。
- 多副本场景 :仅需备份主副本(leader)的数据,无需备份所有副本。
- 集群场景 :多节点应在相同时间点备份,以减少节点间数据差异。
- 备份时机 :
- 理想情况 :停止 TDengine 服务后备份,确保数据一致性。
- 生产环境(热备份) :若无法停止服务,可执行
flush database <dbname>
命令强制内存数据落盘,再进行备份。
恢复操作
建议手工操年,明确自己在做什么,以保证数据安全,恢复前需停止服务。
- 前置条件 :
- 必须停止 TDengine 服务。
- TDengine 版本请与备份时保持一致。
- 恢复方式 :
- 完整恢复 :需基于完整的备份目录恢复。可修改
dataDir
参数指向备份目录;若使用原目录,需清空原目录后替换(不可新旧混合)。 - 多副本恢复 :
- 若为全量备份,与完整恢复操作相同。
- 若仅备份了 leader 数据,需将 leader 备份文件复制到其他副本节点。
- 集群恢复 :所有节点必须使用同一备份数据恢复,仅恢复部分节点可能导致启动失败或不可预期问题。
- 完整恢复 :需基于完整的备份目录恢复。可修改
结语
TDengine 提供的四种备份 / 恢复方法各有优劣与适用场景:
- taosdump :社区版首选,适合小到中数据量的开放格式备份;
- taosX :企业版推荐,功能全面,支持复杂迁移与增量操作;
- taos-CLI :轻量临时备份,适合小数据量灵活导出;
- 库文件备份 :灾备场景必选,离线操作但覆盖全量数据;
企业需结合数据规模、可用资源、场景需求(如灾备 / 迁移 / 临时备份),选择单一或组合方案,确保数据安全与业务稳定。你目前用的是哪种备份方式?有没有踩过什么坑,或者有什么实用经验?欢迎在评论区分享!