首页
/ EasyScheduler 3.2.2版本MySQL升级脚本问题分析与修复

EasyScheduler 3.2.2版本MySQL升级脚本问题分析与修复

2025-05-17 08:28:43作者:凌朦慧Richard

在EasyScheduler从3.1.5版本升级到3.2.2版本的过程中,执行MySQL数据库升级脚本时出现了一个SQL语法错误。这个问题主要发生在执行3.2.0_schema下的dolphinscheduler_dml.sql文件时。

问题现象

当用户按照标准升级流程执行MySQL升级脚本时,系统会报出以下错误信息:

ERROR 1064 (42000) at line 34: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter ;CALL dolphin_t_ds_tenant_insert_default();
DROP PROCEDURE dolphin_t_d' at line 1

问题根源分析

经过仔细检查,发现问题出在dolphinscheduler_dml.sql文件中存储过程的定义和使用部分。原始脚本中存在两个主要问题:

  1. 存储过程定义后的分隔符切换不明确
  2. 存储过程调用和删除的语句与分隔符切换语句混在一起

这种结构会导致MySQL解析器无法正确识别SQL语句边界,从而抛出语法错误。

解决方案

正确的脚本应该按照以下结构组织:

  1. 首先明确切换分隔符
  2. 定义存储过程
  3. 切换回标准分隔符
  4. 执行存储过程
  5. 删除存储过程

具体修正后的脚本如下:

drop PROCEDURE if EXISTS dolphin_t_ds_tenant_insert_default;
delimiter d//
CREATE PROCEDURE dolphin_t_ds_tenant_insert_default()
BEGIN
    IF
NOT EXISTS(SELECT 1
                   FROM t_ds_tenant
                   WHERE id = -1)
    THEN
        INSERT INTO `t_ds_tenant` VALUES ('-1', 'default', 'default tenant', '1', current_timestamp, current_timestamp);
END IF;
END;
d//

delimiter ;

-- 如果管理员账号未关联租户,则将其租户设置为默认租户
UPDATE `t_ds_user` SET `tenant_id` = '-1' WHERE (`user_name` = 'admin') AND (`tenant_id` = '0');

CALL dolphin_t_ds_tenant_insert_default();
DROP PROCEDURE dolphin_t_ds_tenant_insert_default;

技术要点说明

  1. 分隔符使用:在MySQL中定义存储过程时,由于过程体内可能包含分号,需要临时更改分隔符以避免提前结束语句。

  2. 存储过程设计:这个存储过程的作用是检查并插入默认租户记录,确保系统始终有一个ID为-1的默认租户。

  3. 数据一致性:脚本中还包含一个UPDATE语句,确保管理员账号与默认租户关联,这是系统升级过程中保证数据一致性的重要步骤。

升级建议

对于使用EasyScheduler的用户,在进行版本升级时应当:

  1. 始终先备份数据库
  2. 仔细检查升级脚本的执行结果
  3. 遇到错误时查看详细的错误信息
  4. 可以分步执行复杂脚本,而不是一次性执行整个文件

这个问题的修复已经包含在后续版本中,用户可以直接使用修正后的脚本完成升级过程。对于已经遇到此问题的用户,可以手动修正脚本后继续执行升级流程。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
595
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K