物联网后端数据可视化消息队列【免费下载链接】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),仅供参考