ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

DolphinScheduler 执行 upgrade-schema 报错连 PostgreSQL?一个环境变量搞定

2026/9/4 18:49:33 拓冰建站 浏览量
DolphinScheduler 执行 upgrade-schema 报错连 PostgreSQL?一个环境变量搞定 【导航台账】制造业数据与AI践行者老蒋的技术博客全系列文章汇总持续更新 文章摘要DolphinScheduler 执行 upgrade-schema.sh 初始化数据库明明修改了 MySQL 配置却报错连接 PostgreSQL根本原因是升级脚本通过 DATABASE 环境变量控制 Spring Profile 激活不设置默认走 postgresql不读取 application.yaml 配置。本文拆解脚本启动逻辑与环境变量传递链路给出三种解决方案与优先级建议照着操作即可避免环境变量隐形坑。问题现象兄弟们前两篇排坑笔记根据zgenjDolphinScheduler 重启数据全丢H2 切换 MySQL 完整避坑指南DolphinScheduler 报错 Cannot load driver classMySQL 驱动路径完整指南、发出后有读者私信我“老蒋我按照你的步骤改了application.yamlMySQL也装好了驱动也放到libs目录了但执行upgrade-schema.sh的时候还是报错连接PostgreSQL怎么回事”报错信息是这样的The following 2 profiles are active: upgrade, postgresql ... Connection to 127.0.0.1:5432 refused.我当时的第一反应是这不科学啊……明明已经在tools/conf/application.yaml里把数据库配置改成了MySQL为什么执行脚本的时候还是去连PostgreSQL后来翻了源码和官方文档才发现DolphinScheduler的upgrade-schema.sh脚本根本不读application.yaml里的数据库类型配置。它通过Spring Boot的spring.profiles.active机制来控制激活哪个数据库profile而这个值来自环境变量DATABASE。 快速自检你是不是也遇到了这些问题▢ 执行 upgrade-schema.sh 报错连接 5432 端口PostgreSQL 默认端口▢ 明明改了 application.yaml 配置脚本还是不生效▢ 日志显示 profiles active 为 postgresql找不到原因本文一次性解决以上所有问题。根因分析第一层upgrade-schema.sh脚本的启动逻辑打开tools/bin/upgrade-schema.sh核心启动命令是这样的$JAVA_HOME/bin/java $JAVA_OPTS \ -cp $DOLPHINSCHEDULER_HOME/tools/conf:$DOLPHINSCHEDULER_HOME/tools/libs/*:$DOLPHINSCHEDULER_HOME/tools/sql \ -Dspring.profiles.activeupgrade,${DATABASE} \ org.apache.dolphinscheduler.tools.datasource.UpgradeDolphinScheduler关键在这里-Dspring.profiles.activeupgrade,${DATABASE}${DATABASE}是一个Shell环境变量脚本会读取它来决定激活哪个数据库profile。如果你没有设置DATABASE环境变量它就是空的。Spring Boot会使用默认值而在DolphinScheduler的配置中默认的数据库profile是postgresql-11。所以当你直接执行./tools/bin/upgrade-schema.sh时实际激活的profile是upgrade,postgresql——这就是为什么它一直去连PostgreSQL的根本原因-。第二层环境变量传递链路整个链路是这样的执行 upgrade-schema.sh ↓ 读取环境变量 DATABASE ↓ 如果 DATABASE 未设置 → 默认为空 ↓ Spring Boot 使用默认 profile → postgresql ↓ 连接 127.0.0.1:5432PostgreSQL默认端口 ↓ 报错Connection refused你改了application.yaml没用因为脚本根本不读它。第三层官方文档其实写了但很多人没注意到在DolphinScheduler的官方文档里其实明确写了在你的命令行设定下列环境变量export DATABASEmysql、export SPRING_PROFILES_ACTIVE${DATABASE}但这段说明藏在“数据源配置”章节的深处很多人包括我在部署时根本没注意到。而且文档里示例用的是export SPRING_PROFILES_ACTIVE${DATABASE}但在upgrade-schema.sh脚本中实际使用的是${DATABASE}直接拼接两者略有差异。解决方案方案一执行时临时设置环境变量推荐最简单DATABASEmysql ./tools/bin/upgrade-schema.sh执行后日志中应该看到The following 2 profiles are active: upgrade, mysql看到mysql就对了说明profile已正确激活-。 补充坑先 export 再执行脚本仍不生效 不注意会怎样分开执行export DATABASEmysql和./tools/bin/upgrade-schema.sh如果换了终端窗口、或者切换了用户环境变量就会丢失依然连 PostgreSQL。 正确做法将环境变量与脚本写在同一行执行DATABASEmysql ./tools/bin/upgrade-schema.sh变量直接传递给脚本进程不会丢失。方案二修改dolphinscheduler_env.sh永久设置编辑/opt/dolphinscheduler/bin/env/dolphinscheduler_env.sh添加export DATABASEmysql export SPRING_PROFILES_ACTIVE${DATABASE}然后执行source /opt/dolphinscheduler/bin/env/dolphinscheduler_env.sh ./tools/bin/upgrade-schema.sh适用场景需要频繁执行升级脚本、或集群多节点部署的场景注意事项修改环境脚本后必须执行source命令使其在当前终端生效重启终端后自动生效。方案三直接修改脚本不推荐升级会覆盖如果不想每次加环境变量可以直接修改tools/bin/upgrade-schema.sh将${DATABASE}硬编码为mysql-Dspring.profiles.activeupgrade,mysql但不推荐因为版本升级时这个文件会被覆盖。验证结果正确执行后日志应该是这样的2026-08-23 05:10:33.574 INFO --- [main] o.a.d.t.d.UpgradeDolphinScheduler : The following 2 profiles are active: upgrade, mysql ... HikariPool-1 - Start completed.关键标志profiles are active: upgrade, mysql→ profile激活正确HikariPool-1 - Start completed.→ 数据库连接成功无Connection to 127.0.0.1:5432 refused错误✅ 执行成功三大标志✅日志明确输出The following 2 profiles are active: upgrade, mysql✅连接池启动成功HikariPool-1 - Start completed✅无 5432 端口连接拒绝报错无数据库类异常经验总结怕你忘了我再啰嗦一遍DolphinScheduler的upgrade-schema.sh通过DATABASE环境变量决定连接哪种数据库而不是读取application.yaml。DATABASE不设置默认走postgresql。落到具体操作上就是三条执行upgrade-schema.sh时必须加DATABASEmysql这是最简单的修复方式。加了之后日志会显示upgrade, mysql没加会显示upgrade, postgresql-。application.yaml的修改不是没用但作用不同application.yaml控制的是运行时的数据库连接而upgrade-schema.sh通过环境变量控制。两者都需要配置正确缺一不可。如果看到postgresqlprofile被激活先检查DATABASE环境变量不用怀疑配置改错了90%的情况就是忘了设置DATABASEmysql-。适用范围本文方案适用于所有使用DolphinScheduler Standalone或集群模式需要通过upgrade-schema.sh初始化或升级MySQL元数据库的场景。也适用于切换PostgreSQL、H2等其他数据库类型——只需将DATABASE改为对应的值即可。系列导航本文属于《数据与AI工程排坑笔记》系列上一篇DolphinScheduler数据源连接报错“com.mysql.cj.jdbc.Driver”JDBC驱动的“路径战争”下一篇系列暂告一段落数仓系列三篇排坑笔记全部产出本文问题源自《制造企业数仓选型实战为什么我们选了 Apache Doris DolphinScheduler》《从零搭建 Apache Doris DolphinScheduler保姆级步步实操手册附完整命令》实战过程完整源码及深度教程见该文。建议收藏下次执行upgrade-schema.sh报错连接PostgreSQL时先检查是否忘了加DATABASEmysql。【热榜文精品推荐】TOP1、我用 WorkBuddy 分析了 30 篇 CSDN 博客发现 3 个反直觉的流量真相TOP2、还在翻 git log 写周报WorkBuddy 一键生成结构化周报TOP3、老攻城狮的AI开发环境搭建全记录从零到跑通本地大模型一日速通版TOP4、LangChain Agent 反复调用工具死循环结构化返回 Prompt 规则TOP5、智联工坊实战多工具协同Agent让AI像人类一样规划与执行复杂任务TOP6、代码审查不想得罪人WorkBuddy 先做第一轮审查互动与交流你在部署DolphinScheduler时有没有遇到过类似的问题是不是也折腾了半天才发现是环境变量的问题欢迎评论区交流咱们互相支支招——说实话就因为少加一个环境变量折腾一整天这事我干过不止一次了。关于作者制造业数据与AI践行者老蒋23年IT老兵。聚焦制造业数据架构与AI融合落地。全流程实战全源码开源。标签#排坑笔记#DolphinScheduler#upgrade-schema#Spring Profile#PostgreSQL#环境变量#数据库初始化#运维踩坑