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

【导航台账】制造业数据与AI践行者老蒋的技术博客全系列文章汇总(持续更新)

📌 文章摘要

DolphinScheduler 执行 upgrade-schema.sh 初始化数据库,明明修改了 MySQL 配置却报错连接 PostgreSQL?根本原因是升级脚本通过 DATABASE 环境变量控制 Spring Profile 激活,不设置默认走 postgresql,不读取 application.yaml 配置。本文拆解脚本启动逻辑与环境变量传递链路,给出三种解决方案与优先级建议,照着操作即可避免环境变量隐形坑。

问题现象

兄弟们,前两篇排坑笔记(根据zgenjDolphinScheduler 重启数据全丢?H2 切换 MySQL 完整避坑指南DolphinScheduler 报错 Cannot load driver class?MySQL 驱动路径完整指南、)发出后,有读者私信我:“老蒋,我按照你的步骤改了application.yaml,MySQL也装好了,驱动也放到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.active=upgrade,${DATABASE} \
  org.apache.dolphinscheduler.tools.datasource.UpgradeDolphinScheduler

关键在这里:-Dspring.profiles.active=upgrade,${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:5432(PostgreSQL默认端口)
    ↓
报错:Connection refused

你改了application.yaml没用,因为脚本根本不读它。

第三层:官方文档其实写了,但很多人没注意到

在DolphinScheduler的官方文档里,其实明确写了:

在你的命令行设定下列环境变量:export DATABASE=mysqlexport SPRING_PROFILES_ACTIVE=${DATABASE}

但这段说明藏在“数据源配置”章节的深处,很多人(包括我)在部署时根本没注意到。而且文档里示例用的是export SPRING_PROFILES_ACTIVE=${DATABASE},但在upgrade-schema.sh脚本中实际使用的是${DATABASE}直接拼接,两者略有差异。

解决方案

方案一:执行时临时设置环境变量(推荐,最简单)

DATABASE=mysql ./tools/bin/upgrade-schema.sh

执行后,日志中应该看到:

The following 2 profiles are active: "upgrade", "mysql"

看到mysql就对了,说明profile已正确激活-。

💡 补充坑:先 export 再执行脚本仍不生效 不注意会怎样:分开执行export DATABASE=mysql./tools/bin/upgrade-schema.sh,如果换了终端窗口、或者切换了用户,环境变量就会丢失,依然连 PostgreSQL。 正确做法:将环境变量与脚本写在同一行执行(DATABASE=mysql ./tools/bin/upgrade-schema.sh),变量直接传递给脚本进程,不会丢失。

方案二:修改dolphinscheduler_env.sh永久设置

编辑/opt/dolphinscheduler/bin/env/dolphinscheduler_env.sh,添加:

export DATABASE=mysql
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.active=upgrade,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错误

✅ 执行成功三大标志

  1. ✅日志明确输出:The following 2 profiles are active: "upgrade", "mysql"
  2. ✅连接池启动成功:HikariPool-1 - Start completed
  3. ✅无 5432 端口连接拒绝报错,无数据库类异常

经验总结

怕你忘了,我再啰嗦一遍:DolphinScheduler的upgrade-schema.sh通过DATABASE环境变量决定连接哪种数据库,而不是读取application.yaml DATABASE不设置,默认走postgresql

落到具体操作上就是三条:

  1. 执行upgrade-schema.sh时必须加DATABASE=mysql:这是最简单的修复方式。加了之后日志会显示"upgrade", "mysql",没加会显示"upgrade", "postgresql"-。

  2. application.yaml的修改不是没用,但作用不同application.yaml控制的是运行时的数据库连接,而upgrade-schema.sh通过环境变量控制。两者都需要配置正确,缺一不可。

  3. 如果看到postgresql profile被激活,先检查DATABASE环境变量:不用怀疑配置改错了,90%的情况就是忘了设置DATABASE=mysql-。

适用范围

本文方案适用于所有使用DolphinScheduler Standalone或集群模式,需要通过upgrade-schema.sh初始化或升级MySQL元数据库的场景。也适用于切换PostgreSQL、H2等其他数据库类型——只需将DATABASE改为对应的值即可。

系列导航

本文问题源自《制造企业数仓选型实战:为什么我们选了 Apache Doris + DolphinScheduler》从零搭建 Apache Doris + DolphinScheduler:保姆级步步实操手册(附完整命令)实战过程,完整源码及深度教程见该文。

💡 建议收藏:下次执行upgrade-schema.sh报错连接PostgreSQL时,先检查是否忘了加DATABASE=mysql

【热榜文&精品推荐】
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 #环境变量 #数据库初始化 #运维踩坑

内容概要:本文围绕基于改进多目标粒子群优化算法(小生境粒子群算法)的配电网有功-无功协调优化问题展开研究,旨在通过智能优化算法有效降低网络损耗、提升电压质量并增强配电系统的运行效率。研究系统地介绍了小生境粒子群算法的改进策略,构建了包含功率平衡、电压安全、设备容量等多重约束的多目标优化模型,并采用IEEE标准测试系统进行仿真验证,充分证明了该方法在处理多目标、多约束优化问题上的优越性能。全文涵盖从数学建模、算法设计、约束处理到多目标折衷解选择的完整流程,并配套提供了完整的Matlab代码实现,便于读者复现结果与进行二次开发。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事电力系统优化、智能算法研究或相关领域工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决配电网中有功与无功功率的协同优化问题,实现节能降耗与电压稳定;②学习并掌握多目标粒子群算法及其小生境改进策略在电力系统中的具体应用与实现细节;③通过Matlab代码进行仿真,加深对智能优化算法在工程实践中应用的理解,提升科研与工程实践能力。; 阅读建议:此资源以理论分析与代码实现紧密结合的方式呈现,建议读者在深入理解算法原理和模型构建的基础上,结合所提供的Matlab代码进行仿真实验,重点关注参数设置、收敛性分析与结果可视化等关键环节,从而实现从理论认知到实践验证的完整闭环。
内容概要:本文系统阐述了LVGL(Light and Versatile Graphics Library)嵌入式轻量化图形界面开发的完整技术体系,涵盖从架构原理、环境搭建、控件开发、样式美化、事件机制到硬件移植与性能优化的全流程。深入剖析LVGL的分层架构、对象化编程思想、脏区局部刷新算法、内存管理与低功耗调度机制,并通过PC仿真与可视化工具提升开发效率。全面讲解基础与高级控件的手写实现、UI样式定制、中文字库适配、动画特效开发,并以STM32等主流平台为例,详细演示硬件移植全过程。最后通过一个集数据可视化、多页面导航、参数设置与传感器联动于一体的智能触控终端综合项目,实现理论与实践的深度融合。; 适合人群:具备C语言基础和嵌入式开发经验的工程师、电子信息类专业学生、参与大创或竞赛的开发者,以及从事工业控制、物联网、智能设备研发的技术人员。; 使用场景及目标:① 掌握LVGL在无操作系统MCU上的移植与运行机制;② 实现嵌入式设备的高质量GUI界面开发,包括中文显示、流畅动画与低功耗优化;③ 构建具备多页面、数据联动与用户交互的工业级触控终端项目,满足产品化与结题展示需求。; 阅读建议:学习过程中应结合仿真环境与实际硬件平台同步实践,重视lv_conf.h配置、HAL层接口适配与调试方法,建议按照“仿真验证→代码理解→硬件移植→项目集成”的路径循序渐进,重点关注内存管理、事件机制与性能优化等易出错环节。
内容概要:本文围绕“高效的球形通量计算(2D)研究”展开,基于Matlab实现相关算法,旨在提升二维空间中球形通量的计算效率与精度。研究聚焦于数值积分方法的优化,结合几何建模与数学分析手段,针对传统计算过程中存在的复杂度高、耗时长等问题,提出简化的算法流程与高效的数值求解策略。通过模块化代码设计与关键算法优化,显著提升了通量计算的运行效率与结果稳定性,适用于物理场仿真、电磁学分析、热力学建模及环境科学等需要频繁进行区域通量估算的工程与科研场景。文中提供了完整的Matlab代码实现,便于读者复现与拓展应用。; 适合人群:具备Matlab编程基础,从事科研或工程仿真的研究生、工程师及科研人员,尤其适合在物理、电磁、能源、图像处理或环境工程等领域有数值计算需求的技术人员。; 使用场景及目标:①应用于科学计算中二维球形区域内通量的高效求解,如电场、磁场或热量通量的定量分析;②服务于教学演示、算法性能对比研究及工程仿真平台开发,提升复杂积分问题的求解速度与准确性。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注算法实现细节与性能优化策略,深入理解数值积分与几何建模的结合方式,并参考文档中提到的技术方向拓展至三维场景或其他物理场的通量计算应用。
内容概要:本文围绕永磁同步电机(PMSM)在宽速域范围内的无传感器控制技术展开研究,提出了一种基于观测器异构冗余与柔性切换的复合控制策略。该策略融合高频信号注入法(适用于零低速区)与自适应滑模观测器(SMO,适用于中高速区),通过设计动态加权融合机制实现全速域内转子位置与速度的精确估计。系统在静止和低速状态下采用脉振方波高频注入实现初始定位,在中高速运行时则利用模糊超螺旋滑模观测器提升鲁棒性与动态响应性能,并引入相位同步校正与平滑切换算法以有效抑制模式切换过程中的抖动与误差累积。研究在Simulink平台构建了完整的控制系统仿真模型,全面验证了所提方法在启动精度、稳态性能、动态响应及抗负载扰动等方面的优越性。; 适合人群:具备电机控制、现代控制理论及MATLAB/Simulink仿真基础的电气工程、自动化及相关专业的研究生、科研人员和工程技术人员。; 使用场景及目标:①解决永磁同步电机在无机械传感器条件下全速域运行的控制难题;②为高性能电机驱动系统(如电动汽车、精密伺服系统)提供可靠的速度与位置估算方案;③深入理解高频注入、滑模观测器、多观测器融合与平滑切换等先进控制算法的设计与实现。; 阅读建议:此资源以Simulink仿真实现为核心,不仅提供了详细的算法原理与模型架构,还包含了完整的运行结果分析。建议读者结合文中框架在MATLAB环境中动手复现仿真模型,重点关注不同速度区间下观测器的切换逻辑与参数整定过程,并通过对比实验深入理解各模块的作用机理与系统整体性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值