问题:
spring-boot 整合quartz的时候,连接windows的mysql的时候好好的,然而用linux上的mysql的时候,启动就报了这个错:
Failure obtaining db row lock: Table ‘test.QRTZ_LOCKS’ doesn’t exist
分析:
首先用windows的mysql是没问题的。
其实linux的mysql也是有这个表的,但由于是从windows复制过去的,所以表名都是小写的,而quartz启动的时候找的是大写,所以认为test.QRTZ_LOCKS这个表不存在。
原理就在于mysql有个配置属性:lower_case_table_names
windows上安装mysql,默认是1,代表忽略大小写
linux上安装mysql,默认是0,代表不忽略大小写
所以在windows好好的,在linux上就报错了。
解决
方法1:最快的解决办法,就是将所有quartz开头的表,都换成大写就好了
方法2:让linux也像windows一样,忽略大小写。
具体就是设置linux上的lower_case_table_names=1,就和windows一样了。步骤如下:
1、先执行sql查看lower_case_table_names,如下图:
show variables like '%lower_case_table_names%';
2、修改/etc/my.cnf文件,在文件末尾加lower_case_table_names=1,如下图。
3、保存退出,重启mysql即可。用到的命令:
cd /etc
vim my.cnf
末尾加上lower_case_table_names=1 保存退出
service mysqld restart
4、重启完再看lower_case_table_names的值
再次启动项目,就成功了