ElasticJob启动时报错:Index column size too large. The maximum column size is 767 bytes|Specified key was

最近初用ElasticJob,启动项目时出现了一个非常棘手的错误,在本地环境报错如下:

[main] 10-10 18:24:24 ERROR 66376 com.dangdang.ddframe.job.event.JobEventBus - Elastic job: create JobEventListener failure, error is: 
com.dangdang.ddframe.job.event.JobEventListenerConfigurationException: java.sql.SQLException: Index column size too large. The maximum column size is 767 bytes.
	at com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration.createJobEventListener(JobEventRdbConfiguration.java:48) ~[elastic-job-common-core-2.1.5.jar:na]
...
Caused by: java.sql.SQLException: Index column size too large. The maximum column size is 767 bytes.
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084) ~[mysql-connector-java-5.1.30.jar:na]
...

因为不影响使用,便上了正式环境,在正式环境报错如下(不知道为什么不一样):

10-17 12:07:57 [main][ERROR][com.dangdang.ddframe.job.event.JobEventBus.register():60] - Elastic job: create JobEventListener failure, error is:
com.dangdang.ddframe.job.event.JobEventListenerConfigurationException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
        at com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration.createJobEventListener(JobEventRdbConfiguration.java:48) ~[elastic-job-common-core-2.1.5.jar!/:na]
...
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_181]
...

google了好久,答案全都是说索引超过了767字节,有让修改数据库配置的(这个确实可以解决问题,但是我们只是后端,还是不劳烦别人了),有让找过大索引和主键的(这个所有表都找了,确实没有)。
最后同事发现了问题原因所在:
ElasticJob首次启动时会自动生成两张表:job_execution_log 和 job_status_trace_log,然后在项目启动时,它会自动地给job_status_trace_log表创建索引"TASK_ID_STATE_INDEX",字段包括了表中的task_id和state,但是task_id默认类型为varchar,长度为255,在MySQL中占用了2553 = 765个字节,state类型varchar,长度20占用了203 = 60字节,加起来就超过了767的限制。所以每次启动项目,ElasticJob都回去创建索引,然后创建失败,报错。
解决办法也很简单,手动创建这个索引,把task_id长度设置为191,即可。

SQL如下:
CREATE INDEX TASK_ID_STATE_INDEX ON job_status_trace_log(task_id(191),state);

喜欢本文的朋友不要忘记点一个免费的赞哦,你的赞将是我最大的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Counter-Strike大牛

创作不易,感谢鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值