一、问题现象
启动 DataEase 后,报错信息包含类似 Table 'xxx' doesn't exist 的内容:
Caused by: java.sql.SQLSyntaxErrorException: Table 'dataease.QRTZ_LOCKS' doesn't exist
2023-06-26 14:33:59,656 [QuartzScheduler_clusterScheduler-947a13014bba1687757802422_MisfireHandler] ERROR o.s.s.quartz.LocalDataSourceJobStore 4017 - MisfireHandler: Error handling misfires: Database error recovering from misfires.
org.quartz.JobPersistenceException: Database error recovering from misfires.
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'dataease.V_AUTH_MODEL' doesn't exist
### The error may exist in io/dataease/ext/ExtDataSourceMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select datasource.*, authInfo.privileges as `privileges` from (select GET_V_AUTH_MODEL_ID_P_USE (?, 'link') cids) t,datasource left join ( SELECT auth_source, group_concat( DISTINCT sys_auth_detail.privilege_extend ) as `privileges` FROM ( `s
二、问题原因
出现类似 Table 'dataease.V_AUTH_MODEL' doesn't exist 这类报错,通常是因为数据库表名大小写敏感配置错误,比如配置了大小写敏感后建表时使用的全小写表名,而程序在查询时使用的是全大写表名,所以会报表找不到错误。
通常,可以在 my.cnf 文件中配置表名自动小写,这样在创建表时,表名以小写形式存储在磁盘上,并且在查询表时不区分大小写。参数如下:
在数据库中执行如下语句可以查询配置是否生效:
show variables like 'lower_case%';
三、解决方法
1. 使用内置数据库时
DataEase 的安装包中自带的 MySQL 数据库默认配置了 lower_case_table_names=1,如果你是使用的安装包部署仍出现此问题,则可能是 my.cnf 文件权限不正确导致。必须将 my.cnf 的文件权限配置为 644 后重启系统方可生效,不能设值为 777。如果文件权限放开太大 MySQL 数据库启动时不会加载此配置文件,所以配置不会生效。
# 正确的文件权限
# ls -l /opt/dataease/conf/my.cnf
-rw-r--r--. 1 root root 633 6月 29 14:10 /opt/dataease/conf/my.cnf
# 使用此命令修改文件权限为 644
chmod 644 /opt/dataease/conf/my.cnf
2. 使用外置数据库时
如果是使用了自己部署的外置数据库,建议使用在线文档中配的 my.cnf 配置自己的数据库:离线安装 - DataEase 文档。