拓冰建站拓冰建站
首页 / 资讯中心 / 正文

DolphinScheduler 重启数据全丢?H2 切换 MySQL 完整避坑指南

【导航台账】制造业数据与AI践行者老蒋的技术博客全系列文章汇总持续更新 文章摘要DolphinScheduler 单机版重启后项目、工作流配置全部丢失根本原因是默认使用 H2 内存数据库服务停止数据即清空。本文完整讲解从 H2 内存数据库切换到 MySQL 持久化的全流程覆盖双配置文件修改、JDBC 驱动部署、数据库初始化三大核心步骤拆解 YAML 缩进、profile 默认值两个高频踩坑点照着操作即可实现数据永久保存。问题现象兄弟们你们有没有遇到过这种情况好不容易把DolphinScheduler搭起来花了一个多小时配好了租户、数据源、工作流信心满满地准备投入使用了。结果服务器重启了一下再次登录Web UI——所有配置全没了。项目没了、工作流没了、数据源也没了。就像什么都没发生过一样。我当时的第一反应是这不科学啊……我明明配置好了怎么重启一下就全丢了后来翻了半天文档才发现DolphinScheduler的Standalone模式默认用的是H2内存数据库。什么是H2内存数据库简单说就是数据存在内存里服务一停数据就没了。这个设计本来是为了让新手“5分钟快速体验”的但如果你打算正经用必须把元数据库从H2换成MySQL否则数据丢失是迟早的事。 快速自检你是不是也遇到了这些问题▢ Standalone 模式重启服务所有配置 / 工作流全部消失▢ 切换 MySQL 后启动报错找不到 JDBC 驱动▢ 执行初始化脚本默认连到 PostgreSQL本文一次性解决以上所有问题。根因分析第一层H2内存数据库的“方便”与“代价”DolphinScheduler Standalone模式的默认配置是这样的yaml复制下载datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:dolphinscheduler;MODEMySQL;DB_CLOSE_DELAY-1 username: sa password: 注意看URL里的mem:——数据存在内存里不是磁盘上。这个配置的好处是零配置启动不需要装MySQL就能跑起来。但代价是服务停止 数据蒸发。第二层官方文档的“隐藏步骤”官方文档虽然说了可以切换到MySQL但有几个关键步骤藏得比较深tools模块的配置需要单独改——只改standalone-server的配置不够升级脚本还会读tools的配置JDBC驱动要放到多个目录——不是只放一个地方就行upgrade-schema.sh有个profile陷阱——直接执行可能会连到PostgreSQL这些细节在官方文档里不是特别显眼很容易踩坑。第三层YAML缩进问题DolphinScheduler使用SnakeYAML解析配置文件缩进必须严格正确。很多人在修改application.yaml时缩进多了一个空格或少了一个空格导致配置根本没生效。解决方案前置准备项目要求MySQL服务5.7或8.0已启动且可连接MySQL数据库已创建dolphinscheduler库MySQL用户已创建专用用户并授权JDK已配置JAVA_HOME创建数据库和用户CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER ds_user% IDENTIFIED BY Ds2026#Secure; GRANT ALL PRIVILEGES ON dolphinscheduler.* TO ds_user%; FLUSH PRIVILEGES;Step 1修改standalone-server配置文件路径standalone-server/conf/application.yaml找到spring.datasource配置块将H2配置替换为MySQLspring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicodetruecharacterEncodingUTF-8useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/Shanghai username: ds_user password: Ds2026#Secure hikari: connection-test-query: SELECT 1 minimum-idle: 5 maximum-pool-size: 20 pool-name: dolphinHikariCP auto-commit: true idle-timeout: 30000 max-lifetime: 1800000 connection-timeout: 30000 sql: init: schema-locations: classpath:sql/dolphinscheduler_mysql.sql mode: always platform: mysql⚠️注意schema-locations必须指向dolphinscheduler_mysql.sql而不是dolphinscheduler_h2.sql。YAML缩进必须正确每层缩进2个空格否则配置会被忽略。Step 2修改tools模块配置很多人漏掉的一步文件路径tools/conf/application.yamlDolphinScheduler的upgrade-schema.sh脚本会读取tools模块的配置如果这里还是H2或PostgreSQL升级脚本就会连错数据库。同样将datasource配置替换为MySQL与Step 1保持一致。Step 3添加MySQL JDBC驱动DolphinScheduler不会内置MySQL驱动需要手动添加。下载驱动推荐8.0.33版本wget https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar将驱动复制到以下目录cp mysql-connector-j-8.0.33.jar /opt/dolphinscheduler/tools/libs/ cp mysql-connector-j-8.0.33.jar /opt/dolphinscheduler/standalone-server/libs/⚠️注意两个目录都需要放只放一个地方会导致部分模块加载不到驱动。 补充坑驱动版本与 MySQL 版本不匹配 不注意会怎样MySQL 5.7 使用com.mysql.cj.jdbc.Driver会报错MySQL 8.0 使用旧驱动类com.mysql.jdbc.Driver也会连接失败。 正确做法MySQL 8.0 统一使用 mysql-connector-j 8.x 版本驱动类为com.mysql.cj.jdbc.DriverMySQL 5.7 对应 5.1.x 版本驱动驱动类为com.mysql.jdbc.Driver。Step 4执行数据库初始化切换到dolphinscheduler用户执行cd /opt/dolphinscheduler DATABASEmysql ./tools/bin/upgrade-schema.sh⚠️DATABASEmysql是必须要加的如果不加这个环境变量脚本默认激活postgresqlprofile会尝试连接PostgreSQL。加上之后日志中应该看到The following 2 profiles are active: upgrade, mysql执行成功后可以用MySQL客户端验证表是否已创建mysql -u ds_user -p -e USE dolphinscheduler; SHOW TABLES;应该能看到t_ds_开头的数十张表。Step 5重启DolphinScheduler./bin/dolphinscheduler-daemon.sh stop standalone-server sleep 5 ./bin/dolphinscheduler-daemon.sh start standalone-server查看启动日志确认MySQL连接成功tail -100 standalone-server/logs/dolphinscheduler-standalone.log | grep -i hikari\|mysql\|started预期看到HikariPool-1 - Start completed.验证持久化效果登录Web UI随便创建一个租户或数据源重启DolphinScheduler服务再次登录确认数据依然存在经验总结怕你忘了我再啰嗦一遍DolphinScheduler Standalone模式默认用H2内存数据库重启丢数据是正常现象。切换到MySQL才能真正实现持久化。落到具体操作上就是四条改两个地方的配置standalone-server/conf/application.yaml和tools/conf/application.yaml都要改成MySQL。漏改tools会导致upgrade-schema.sh执行失败。执行upgrade-schema.sh时必须加DATABASEmysql不加的话默认走postgresqlprofile。加了之后日志会显示upgrade, mysql没加会显示upgrade, postgresql。JDBC驱动要放到两个目录tools/libs/和standalone-server/libs/都需要放。驱动类名是com.mysql.cj.jdbc.DriverMySQL 8.x专用。YAML缩进必须正确每层缩进2个空格多一个少一个都不行。建议修改前先备份原文件防止改错后无法恢复。实在人老蒋补充做了二十多年运维最烦的就是这种 “默认配置能用但不能正经用” 的设计。新手踩一次坑半天就没了把这些细节写透大家少走点弯路。适用范围本文方案适用于所有使用DolphinScheduler Standalone模式且需要数据持久化的场景。如果你只是临时体验一下DolphinSchedulerH2内存数据库确实够用但如果你打算长期使用务必切换到MySQL或PostgreSQL。集群模式下本身就需要外部数据库不存在这个问题。系列导航系列传送门 【制造业数据与AI落地实战】 【WorkBuddy工作场景应用实践】 【AI赋能数据开发工程手册】上一篇智联工坊数据底座搭建全记录从零部署Apache Doris DolphinScheduler步步实操版下一篇《DolphinScheduler数据源连接报错com.mysql.cj.jdbc.DriverJDBC驱动的“路径战争”》即将发布本文问题源自《制造企业数仓选型实战为什么我们选了 Apache Doris DolphinScheduler》《从零搭建 Apache Doris DolphinScheduler保姆级步步实操手册附完整命令》实战过程完整源码及深度教程见该文。【热榜文精品推荐】TOP1、我用 WorkBuddy 分析了 30 篇 CSDN 博客发现 3 个反直觉的流量真相TOP2、还在翻 git log 写周报WorkBuddy 一键生成结构化周报TOP3、老攻城狮的AI开发环境搭建全记录从零到跑通本地大模型一日速通版TOP4、LangChain Agent 反复调用工具死循环结构化返回 Prompt 规则TOP5、智联工坊实战多工具协同Agent让AI像人类一样规划与执行复杂任务TOP6、代码审查不想得罪人WorkBuddy 先做第一轮审查 建议收藏下次部署DolphinScheduler时对照本文的四步流程操作避免因H2内存数据库导致数据丢失。互动与交流你在部署DolphinScheduler时有没有遇到过“重启丢数据”的问题或者切换到MySQL时卡在了某个步骤欢迎评论区交流咱们互相支支招——说实话第一次发现配置全丢了的时候我是真的有点崩的。关于作者制造业数据与AI践行者老蒋23年IT老兵。聚焦制造业数据架构与AI融合落地。全流程实战全源码开源。标签#排坑笔记#DolphinScheduler#数据持久化#H2数据库#MySQL#运维踩坑#调度系统#数据架构
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门