尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ThingsBoard 多租户备份:凌晨自动跑,数据坏了也能按租户找回
ThingsBoard 多租户备份:凌晨自动跑,数据坏了也能按租户找回【免费下载链接】thingsboardOpen-source IoT Platform - Device management, data collection, processing and visualization.项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard如果你在用 ThingsBoard 给多个客户跑设备平台,最怕的就是手动备份做到一半断掉,第二天发现某个租户的历史遥测数据没了着落。这套流程把按租户备份变成每天半夜自己跑的任务。不做自动备份,坑长什么样手动 pg_dump 导到一半网络断了,留下的文件是半份表,你根本不知道它缺了哪几张;客户要求只回滚我们租户最近一周,可你手里只有全库快照,没有能单独拿出来恢复的租户级文件;磁盘坏掉时花两小时灌完备份,最后发现 .sql 打不开——平时压根没验证过。这三件事的共同点:备份存在不等于备份可用。整体思路先把链路想清楚,数据从哪来、存到哪、怎么确认没丢:数据源是容器里的 PostgreSQL(设备、租户、ts_kv 时序表都在里面)→ 用 pg_dump 按 tenant_id 切片导出成 .dump 文件 → 落到主机上的 backups 目录 → 定期恢复到空库再数行数验证 → 失败就写错误日志,让你知道哪份备份不可信。tenant_id 说白了就是每个租户在平台上的唯一编号,几乎所有业务表都带这一列,这正是我们能按租户切片的根本原因。落地步骤先从数据库里把租户ID清单捞出来做完这一步,你会拿到一行一个租户ID的清单,后面脚本直接拿它循环。# 查 tenant 表,输出纯文本,每行一个 UUID docker compose exec -T postgres psql -U postgres -d thingsboard -Atc \ select id::text from tenant-Atc关掉表头只出裸数据;id::text是因为 UUID 直接打印会带括号,转成字符串方便 shell 循环。tenant 表就是租户数据的入口,它的增删改查逻辑可以参考 租户 DAO 模块。清单拿到手,接下来把它交给备份脚本。写一个按租户切片的备份脚本做完这一步,每个租户对应一个独立 .dump,单租户坏了不影响别人,恢复时也只灌自己的那份。#!/usr/bin/env bash # 按租户切片备份:靠 tenant_id 过滤,产物可单独恢复 set -euo pipefail STAMP$(date %F_%H%M) OUT_DIR./backups/${STAMP} mkdir -p $OUT_DIR # 从 tenant 表拿全部租户ID docker compose exec -T postgres psql -U postgres -d thingsboard -Atc \ select id::text from tenant | while read -r tid; do # -Fc:自定义压缩格式,恢复时可挑表、可并行 # --where:给列出的每张表都加租户过滤,只导这一个租户的行 docker compose exec -T postgres pg_dump -U postgres -d thingsboard \ -t ts_kv -t ts_kv_latest -t device -t device_credentials \ --where tenant_id in (${tid}) \ -f /tmp/tb_${tid}.dump docker compose cp postgres:/tmp/tb_${tid}.dump ${OUT_DIR}/ done echo 备份完成: ${OUT_DIR}两个关键参数值得留意:-Fc产出自定义格式,恢复时能挑表、能并行;--where只对-t显式列出的表生效,所以想按租户切的表都要列全。如果你的 compose 里 postgres 服务名不叫 postgres,改脚本里那一处就行。脚本手动跑通之后,剩下就是让它别依赖人记得。让 crontab 每天半夜自己跑做完这一步,每天 02:30 备份自动执行,stdout 和报错全进独立日志,你只需要偶尔翻一眼。# crontab -e 加这一行:02:30 跑备份,日志单独落盘 30 2 * * * /opt/tb-backup/run_backup_all.sh /var/log/tb_backup.log 21时点选在设备上报的低峰期。pg_dump 走的是 MVCC 一致性快照,不需要停写,但半夜跑对线上查询的压力最小。验证与兜底备份这件事,本质是给自己买个保险:不验证过的备份,等于没备份。恢复测试怎么做才靠谱:把某份 .dump 灌进一个全新的空库,再和源库当时的行数对比,一致才算数。#!/usr/bin/env bash # 恢复演练:空库 行数比对 DUMP$1 # 待验证的 .dump TID$2 # 对应的租户ID createdb tb_restore_check pg_restore -d tb_restore_check $DUMP NEW$(psql -d tb_restore_check -Atc select count(*) from ts_kv) OLD$(docker compose exec -T postgres psql -U postgres -d thingsboard \ -Atc select count(*) from ts_kv where tenant_id in ($TID)) [ $NEW $OLD ] echo 验证通过 || \ { echo $(date) 行数不一致: ${TID} /var/log/tb_backup_error.log; exit 1; }每周挑一两个租户跑一遍就够,不用天天来。备份失败怎么第一时间知道:脚本里的set -e保证任何一步挂掉就整体退出,再在退出路径上把租户ID和时间戳追加进/var/log/tb_backup_error.log。然后配个最简单的巡检:每天早上用 cron 检查这个错误日志有没有新增行,有就发邮件或丢到 IM 群。如果你已经上了监控栈(docker 目录里有 prometheus-grafana 的 compose 文件),把这个错误日志接成告警规则更省事。生产环境注意事项保留策略:每日备份留 30 天,月度备份留 12 个月,过期直接删,别让 backups 目录撑爆磁盘。每周加一次全量:按表切片只保数据,库结构变更、没列进-t的表,靠每周一次-Fc全库 dump 兜底。本地状态文件不走 pg_dump:队列和 EDQS 用的 RocksDB 状态是文件,靠拷贝目录备份,路径在 thingsboard.yml 里用TB_QUEUE_CF_ROCKS_DB_PATH、TB_EDQS_ROCKSDB_PATH两个环境变量配置。留一份异地:本地盘和数据库同机,盘坏了备份跟着没,压缩包定期 rsync 或上传到对象存储。跑通这套之后,你对某租户数据坏了的焦虑会小很多——凌晨自动导出、每周恢复演练、失败有日志可查。想确认哪些表和租户相关,直接翻 dao 模块里的 ModelConstants,表名和列名都定义在那里。【免费下载链接】thingsboardOpen-source IoT Platform - Device management, data collection, processing and visualization.项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

IOPaint 图像修复教程:本地一键清除图片中的水印、物体与人物

IOPaint 图像修复教程:本地一键清除图片中的水印、物体与人物

IOPaint 图像修复教程:本地一键清除图片中的水印、物体与人物 【免费下载链接】IOPaint Image inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any…

📅 2026/10/20 8:38:03
如何把 Claude 变成能办事的助手:Claude 工具调用上手指南

如何把 Claude 变成能办事的助手:Claude 工具调用上手指南

如何把 Claude 变成能办事的助手:Claude 工具调用上手指南 【免费下载链接】courses Anthropics educational courses 项目地址: https://gitcode.com/GitHub_Trending/cours/courses Anthropic 官方教程仓库 courses 中的 tool_use/ 目录,是一套…

📅 2026/9/8 6:40:55
Python食物营养分析与推荐系统完整实现:从数据库到GUI全栈开发

Python食物营养分析与推荐系统完整实现:从数据库到GUI全栈开发

简介:一份基于Python的食物营养分析与推荐网站项目实例,面向健康饮食爱好者、营养师、健身教练及食品行业从业者,系统解决个性化营养推荐与日常饮食管理难题。文档围绕个性化营养推荐、数据驱动分析和健康饮食推广,详细阐述基于Fl…

📅 2026/9/8 8:37:03
MORE NEWS

更多资讯

📰

公司要我电工证干嘛的 别踩坑!工地太忙根本没时间复习考试

公司要我电工证干嘛的 别踩坑!工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,你是不是也经常听到公司要你考电工证,心里直打鼓?尤其是像我们这种在平顶山做中小型施工企业的人,项目一个接一个,根本抽不出时间来准备考试,还担心一不小心就…

📰

电工证卡片怎么领证的保姆级教程,实操考试心里没底怕挂科?看这篇就够了

电工证卡片怎么领证的保姆级教程,实操考试心里没底怕挂科?看这篇就够了 实操考试心里没底怕挂科?别慌,这是一篇真正从一线电工角度出发的保姆级教程,涵盖【电工证卡片怎么领证的】全流程,帮你从零到一掌握取证、考试、领证的每一步,尤其适合许昌的在职…

📰

电工证能自己制作吗?学历不高怕报不上名,上岗必备怎么办?

电工证能自己制作吗?学历不高怕报不上名,上岗必备怎么办? 你是不是也担心,学历不高,连电工证都报不上名?其实,电工证并不难考,但你得知道 电工证能自己制作吗…

📰

电工证能自己制作吗含金量高吗

电工证能自己制作吗含金量高吗 实操考试心里没底怕挂科,这是很多电工朋友在备考过程中的真实写照。特别是像郑州金水区这些建筑工地上的电工,日常工作压力大、节奏快,一旦考试挂科,不仅影响工作,还可能面临工资下调甚至被辞退的风险。很多人心里都在打鼓…

📰

南宁电工证全部费用+郑州报考避坑指南:怕考不过白交培训费?看懂这些再报名

南宁电工证全部费用+郑州报考避坑指南:怕考不过白交培训费?看懂这些再报名 怕考不过白交培训费?南宁电工证全部费用和郑州报考避坑指南,你得先搞清楚这些。电工证作为特种作业操作证中最具代表性的证书之一,既是进入工地、工厂等场所的基础门槛,也是从…

📰

高压电工证只有6年值不值得考?实操考试心里没底怕挂科

高压电工证只有6年值不值得考?实操考试心里没底怕挂科 实操考试心里没底怕挂科,这几乎是每个想考高压电工证的新人心里的第一反应。高压电工证只有6年,复审又繁琐,很多同行都在问,这个证到底值不值得考?特别是像我们在鹤壁水利工程从事电力安装、运维…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬