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

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

2025-05-17 23:17:02作者:凌朦慧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. 可以分步执行复杂脚本,而不是一次性执行整个文件

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

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