ThingsBoard Edge 升级准备指南:停服检查与数据库备份(附源码级原理解析)

发布时间:2026/10/4 2:56:09

ThingsBoard Edge 升级准备指南:停服检查与数据库备份(附源码级原理解析) 物联网后端数据可视化消息队列【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址https://gitcode.com/GitHub_Trending/th/thingsboard点击查看免费下载导读ThingsBoard Edge 作为运行在边缘侧、与云端 ThingsBoard 协同的轻量化实例其版本升级必须遵循先准备、再迁移、后启动的安全流程而升级前的准备工作停服与数据库备份是整个升级过程能否成功回滚的第一道防线。本篇以仓库中 ThingsBoard Edge 升级指令文档为核心系统讲解升级前三步的关键操作——停止服务、评估备份空间、执行pg_dump备份并结合本仓库中的upgrade.sh脚本与 Docker 升级方案给出可直接复制执行的命令与底层原理分析。一、ThingsBoard Edge 升级流程全景从仓库application/src/main/data/json/edge/instructions/upgrade/目录的组织结构可以看出ThingsBoard Edge 的升级被拆分为三个独立文档对应三条必须按序执行的步骤步骤对应文档核心操作① 升级准备upgrade/upgrade_preparing.md停止tb-edge服务检查数据库大小与磁盘空间完成数据库备份② 升级数据库upgrade/upgrade_db.md执行/usr/share/tb-edge/bin/install/upgrade.sh --fromVersion${FROM_TB_EDGE_VERSION}完成数据库结构迁移③ 启动服务upgrade/start_service.md重新启动tb-edge服务其中本篇聚焦的第一步是整个升级过程的前提只有在服务完全停止、数据库备份完整的前提下后续的包安装与数据库结构升级才具备可回滚的保障。该目录同时为 Ubuntu / CentOS对应 systemd 服务方式与 Docker容器卷方式分别提供了upgrade_preparing.md两者的准备逻辑一致但备份对象与命令形态不同下文分节详述。二、第一步停止 ThingsBoard Edge 服务升级前必须确保边缘服务不再写入数据避免备份期间数据库处于不一致状态。按文档给出的命令停止服务sudo systemctl stop tb-edge {:copy-code}说明tb-edge即 ThingsBoard Edge 的 systemd 服务单元名称。在 Ubuntu / CentOS 的安装类指令文档见 install/ubuntu/instructions.md、install/centos/instructions.md中均以此服务名进行启停管理。停止后建议确认服务确实已退出可通过以下命令验证sudo systemctl status tb-edge输出中出现Active: inactive (dead)即代表服务已完全停止此时才可进入备份环节。三、第二步备份前的空间评估文档明确强调Make a backup of the database before upgrading.Make sure you have enough space to place a backup of the database.升级前必须备份数据库并确保有足够空间存放备份。这是因为pg_dump生成的 SQL 备份文件与数据库实际大小接近若磁盘空间不足备份会中途失败且可能留下不完整的备份文件造成误导。3.1 检查数据库实际大小ThingsBoard Edge 的默认数据库名为tb_edge使用 PostgreSQL 内置函数查询其占用空间sudo -u postgres psql -c SELECT pg_size_pretty( pg_database_size(tb_edge) ); {:copy-code}pg_database_size(tb_edge)返回该数据库的字节数pg_size_pretty(...)将字节数转换为易读格式如234 MB、1.2 GB。3.2 检查可用磁盘空间对备份文件的存放位置通常为根分区/执行磁盘使用率检查df -h / {:copy-code}解读输出关注Avail可用空间列确保其大于pg_database_size的结果Use%超过 90% 时建议先清理日志或临时文件或改用其他有足够空间的挂载点存放备份。从仓库源码角度看升级脚本对空间的依赖同样客观存在packaging/java/scripts/install/upgrade.sh会调用 Java 升级主程序并处理安装目录data下的数据备份充足是失败后能回滚恢复的前提详见第五节。四、第三步执行 PostgreSQL 逻辑备份确认空间充足后以postgres系统用户身份对tb_edge数据库执行逻辑备份sudo -Hiu postgres pg_dump tb_edge tb_edge.sql.bak {:copy-code}命令要点拆解参数/片段含义sudo -Hiu postgres以postgres用户身份执行-H设置 HOME-i模拟登录确保能读取 pg_hba 认证所需的用户环境pg_dump tb_edgePostgreSQL 逻辑备份工具导出tb_edge数据库的完整 schema 与数据 tb_edge.sql.bak将备份重定向写入当前目录下的tb_edge.sql.bak文件4.1 校验备份文件文档要求Check the backup file created successfully确认备份文件创建成功。推荐通过以下两种方式校验方式一检查文件头部是否包含有效的 PostgreSQL 备份声明head -n 5 tb_edge.sql.bak正常备份文件通常以--注释行和PostgreSQL database dump字样开头证明导出过程完整落盘。方式二检查文件大小是否与预期数据库大小量级一致ls -lh tb_edge.sql.bak若文件大小与第三节中pg_database_size的结果处于同一量级即可初步确认备份完整若文件为 0 字节或明显过小则应检查服务是否已停止、数据库连接是否正常后重新备份。4.2 备份文件的妥善保存建议将备份文件复制到与运行环境不同的位置如独立数据盘、NFS 挂载点避免磁盘故障导致备份与数据同时丢失保留备份直到升级完成、新版本运行验证通过后再清理作为失败回滚的保险若使用sudo -Hiu postgres执行备份文件所有者通常为postgres读取时注意权限。五、源码级原理升级数据库阶段如何消费这次准备准备阶段的成果停止的服务、完整的备份直接服务于升级的第二步。仓库中的 upgrade_db.md 给出了升级数据库的命令sudo /usr/share/tb-edge/bin/install/upgrade.sh --fromVersion${FROM_TB_EDGE_VERSION} {:copy-code}该脚本的真实实现位于 packaging/java/scripts/install/upgrade.sh从源码可以确认以下关键点--fromVersion参数解析脚本通过循环解析命令行参数将--fromVersion*的值取出并去除空白字符fromVersion${FROM_VERSION// }用于告诉升级程序当前实例的旧版本号从而精确执行从旧版本到新版本所需的数据库迁移脚本。Java 升级主程序脚本以su切换到运行用户执行java -cp ... -Dloader.mainorg.thingsboard.server.ThingsboardInstallApplication ... -Dinstall.upgradetrue -Dinstall.upgrade.from_version${fromVersion}即启动 ThingsBoard 的安装升级主类并以-Dspring.jpa.hibernate.ddl-autonone关闭自动建表改由迁移脚本控制 schema 变更。升级结果的显式判断脚本在 Java 进程退出后立刻捕获$?upgradeStatus$?并输出ThingsBoard upgrade failed!或ThingsBoard upgraded successfully!最终以升级状态作为脚本退出码。这意味着只有数据库升级成功才能安全地进入第三步行启动服务。由此可以清晰理解准备步骤的定位upgrade.sh会修改数据库结构并写入升级版本标记一旦中途失败唯一可靠的恢复手段就是本次准备的tb_edge.sql.bak——停服保证备份一致性备份保证失败可回滚二者缺一不可。六、Docker 部署形态下的升级准备对于以 Docker 方式部署 ThingsBoard Edge 的环境Linux 或 macOS准备逻辑相同但命令不同详见 upgrade/docker/upgrade_preparing.md。6.1 停止并移除现有容器在存放docker-compose.yml的目录下执行docker compose stop docker compose rm mytbedge {:copy-code}docker compose stop优雅停止全部相关容器docker compose rm mytbedge移除 TB Edge 容器注意保留数据卷数据卷不会因移除容器而删除。6.2 备份数据库数据卷Docker 形态下数据库位于命名卷tb-edge-postgres-data中通过临时busybox容器将该卷完整拷贝到新卷tb-edge-postgres-data-backupdocker run --rm -v tb-edge-postgres-data:/source -v tb-edge-postgres-data-backup:/backup busybox sh -c cp -a /source/. /backup {:copy-code}cp -a保留文件属性权限、时间戳并递归复制/source/.中的/.写法确保卷内所有内容含隐藏文件被复制执行完毕后--rm自动清理临时容器备份即存放在新卷tb-edge-postgres-data-backup中升级前可随时以相同方式反向恢复。Docker 升级流程的后续环节同样可以在 upgrade/docker/upgrade_db.md 中查看通过临时docker-compose-upgrade.yml以thingsboard/tb-edge-pe:${TB_EDGE_VERSION}镜像的upgrade-tb-edge.sh作为 entrypoint配合 PostgreSQL 15 容器执行升级最终使用docker compose -f docker-compose-upgrade.yml up --abort-on-container-exit驱动整个升级过程。这一设计进一步印证无论何种部署形态数据卷/数据库备份 版本化迁移始终是 ThingsBoard Edge 升级的安全底座。七、升级准备清单与常见问题7.1 一键核对清单在真正执行升级前建议逐项确认tb-edge服务已停止systemctl status tb-edge显示 inactive已通过pg_database_size(tb_edge)获知数据库大小df -h /显示可用空间大于数据库大小备份文件tb_edge.sql.bak已生成且头部含 PostgreSQL dump 声明备份已复制到独立存储位置且升级完成前不删除已知当前版本号用于--fromVersion参数可从tb-edge.conf或升级包说明中获得7.2 常见问题Q1备份时提示权限不足备份必须以postgres用户执行sudo -Hiu postgres普通用户无权读取数据库文件或建立数据库连接。Q2pg_dump中途中断怎么办先确认tb-edge服务确实已停止再检查磁盘空间然后删除不完整的备份文件重新执行备份。切勿在不完整备份的基础上继续升级。Q3升级数据库时提示配置合并按 upgrade_db.md 的说明包安装器可能询问是否合并tb-edge配置应选择 merge合并选项确保已有参数不会被覆盖。Q4升级失败如何回滚使用准备阶段生成的tb_edge.sql.bak恢复数据库再重新安装旧版本包。这正是升级前必须备份这一硬性要求的价值所在。八、总结本文完整复现了 ThingsBoard Edge 升级的准备阶段停服systemctl stop tb-edge→ 评估数据库大小与磁盘空间 →pg_dump逻辑备份并校验。通过对仓库中 upgrade.sh 源码与 Docker 升级方案的分析可以看到这一准备阶段并非机械的例行操作而是整个升级链路中唯一能在失败时全身而退的保险机制。将本节命令与 upgrade_db.md、start_service.md 中的升级与启动步骤串联即可构成一套完整、可回滚、可验证的 ThingsBoard Edge 升级实践。赞分享物联网后端数据可视化消息队列【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址https://gitcode.com/GitHub_Trending/th/thingsboard点击查看免费下载相关推荐ThingsBoard Edge Docker 升级前准备停止容器与数据库备份完整指南ThingsBoard Edge Docker 升级前准备停止容器与数据库备份完整指南 本文以 ThingsBoard Edge 在 DockerLinux物联网后端数据可视化消息队列零停机升级Metabase数据库迁移与备份全攻略零停机升级Metabase数据库迁移与备份全攻略 你是否曾因数据库升级失败导致业务中断是否担心过元数据丢失无法恢复本文将通过 3大核心步骤2套实战方案数据分析数据可视化后端数据库客户端企业应用ThingsBoard Edge 基于 Docker 的版本升级实战指南从准备工作到数据库迁移全流程ThingsBoard Edge 基于 Docker 的版本升级实战指南从准备工作到数据库迁移全流程 本文以 ThingsBoard 仓库中 Edge 的 D物联网后端数据可视化消息队列创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/4 2:56:09

Flutter通用列表组件封装实践:从重复代码到一行配置

做Flutter开发做了三年多,接到的大多数需求都离不开列表。不管是商品列表、订单列表、消息列表还是个人中心的菜单列表,表面上业务长得不一样,实际上骨架高度相似:请求数据、处理loading、展示空态、失败重试、渲染item。一开始我…

2026/10/4 2:56:09

2026 领导力测评报告如何用?助力管理者发展实操方法

引文/摘要不少HR都有类似经历:花了几周做360评估,报告发下去,管理者翻两页就放进抽屉。根据DDI发布的调研数据,中国中高层领导者在“培养组织人才”维度的能力评分较2020年前下降了7.7%。问题往往不在测评本身,而在于报…

2026/10/4 2:51:09

企业AI知识库Word解析准确率提升至95%的实战指南

做企业AI知识库,最容易被低估的环节其实是文件解析。我接到的技术咨询里,十有八九不是模型选型出了岔子,也不是向量库参数没调好,而是喂进去的Word文档一团乱麻:正文和页眉混在一起、表格跨页后结构断裂、修订模式下藏…

2026/10/4 3:46:12

网页粒子动画效果如何做

登录页、活动页经常要一层「会动」的底:许多小点慢慢漂,靠近的两点之间拉出细线,鼠标移动时点还会轻轻跟着偏。本例用 jQuery 插件 Particleground 画在整页 body 上,底色 #16a085,点和线 #5cbdaa。 粒子动画需要哪些文…

2026/10/4 3:46:12

LeetCode 443 压缩字符串:双指针原地修改的边界与实现

把一段字符串原地压短,听起来像是个再简单不过的操作,但真到了面试现场或者刷题平台,不少人会在“原地”“计数转字符”“最后一段收尾”这些地方卡住。我最早接触这道题是在准备算法工程师面试的时候,当时觉得 LeetCode 上的“压…

2026/10/4 3:46:12

高职教学数据分析系统:SSM+MySQL+ECharts实战部署指南

简介:本资源是一套面向高职院校学生毕业设计与课程设计的完整Java Web教学分析系统,基于SSM(SpringSpringMVCMyBatis)框架开发,聚焦教学过程数据可视化与教情学情动态分析,助力教师优化教学策略、学生提升学…

2026/10/4 3:46:12

校园小程序内容自动化实战:ThinkPHP+Laravel+Scrapy爬虫架构全解析

做了好几个校园信息类小程序,到头来发现真正卡脖子的不是小程序本身,而是内容从哪来。学校官网、教务处、团委公众号、各学院通知,信息散落一地,人工搬运累死人,漏发还挨骂。所以这个项目从一开始就把爬虫放进了一等公…

2026/10/4 3:46:12

LeetCode 93:回溯算法复原IP地址与剪枝技巧解析

1. 题目在考什么:IP地址合法性判断才是真正的第一课先说说我第一次做这道题时的状态。看到"复原IP地址"六个字,第一反应是:这不就是字符串切分吗?把一串数字切成四段,每段小于255,完事。结果真上…

2026/10/4 3:41:12

CODESYS Softmotion运动控制全景:从单轴到CNC与机器人

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑