尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

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#运维踩坑#调度系统#数据架构
返回列表