解决: Table XX.QRTZ_LOCKS doesn`t exist 的问题

本文解决了一个从Windows Mysql迁移至Docker Mysql容器后出现的Table ‘xx.QRTZ_LOCKS’ doesn’t exist错误。通过调整Docker Mysql配置文件中的lower_case_table_names参数为1,使表名在Linux环境下不区分大小写,从而解决了Quartz定时任务项目启动时报错的问题。

本机环境

window10专业版2004
WSL2(Ubuntu18.04)下的Docker容器(Mysql5.7.22)

问题描述:

Quartz定时任务项目, 数据库从Windows Mysql迁移到Docker Mysql容器后, 启动项目时, 报Table ‘xx.QRTZ_LOCKS’ doesn’t exist错误

问题原因:

Linux系统下Mysql数据表大小写敏感

解决办法

修改Mysql配置文件, 在[mysqld]在下面增加一行
lower_case_table_names=1 (0:大小写敏感;1:大小写不敏感)

Docker已经运行容器修改Mysql配置的方法

  1. 直接在容器内安装vim修改配置文件(本人尝试未成功)
    $ apt-get update
    $ apt-get install vim
    $ vim /etc/mysql/mysql.conf.d/mysqld.cnf
    $ # 在[mysqld]下添加一行: lower_case_table_names=1
    
解决 “Failure obtaining db row lock,提示 Table 'hmk_test.QRTZ_LOCKS' doesn't exist” 错误,可参考以下方法: - **执行 Quartz 表创建脚本**:Quartz 是开源作业调度库,`QRTZ_LOCKS` 是其使用的表之一。需确保数据库中创建了 Quartz 所需的表。可以从 Quartz 官方文档或 GitHub 仓库获取对应数据库类型(如 MySQL、Oracle 等)的表创建脚本,并在 `hmk_test` 数据库中执行。以 MySQL 为例,创建 `QRTZ_LOCKS` 表的示例脚本如下: ```sql -- 创建 QRTZ_LOCKS 表 CREATE TABLE `QRTZ_LOCKS` ( `LOCK_NAME` VARCHAR(40) NOT NULL, PRIMARY KEY (`LOCK_NAME`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` - **检查数据库配置**:确认数据库配置是否正确,包括数据库名称、用户名、密码等。配置文件通常位于 `application.yml` 或 `application.properties` 中。示例 `application.yml` 配置如下: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/hmk_test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: your_username password: your_password ``` - **检查数据库版本兼容性**:确保使用的 Quartz 版本与数据库版本兼容。不同版本的 Quartz 可能对数据库表结构有不同要求,不兼容的版本可能导致表创建失败或无法找到表。 - **检查数据库连接权限**:确保数据库用户具有在 `hmk_test` 数据库中创建和访问表的权限。可以通过以下 SQL 语句授予用户相应权限: ```sql -- 授予用户在 hmk_test 数据库的所有权限 GRANT ALL PRIVILEGES ON hmk_test.* TO 'your_username'@'localhost'; -- 刷新权限 FLUSH PRIVILEGES; ``` - **处理表名大小写问题**:若 MySQL 对表大小写有要求,可能会因大小写不匹配导致查不到表。解决办法是删除掉所有的 `qrtz` 表,重新创建以大写命名的表,同时找到 mysql 的配置文件 `my.cnf`(路径在 `/etc/my.cnf`),在 `[mysqld]` 下输入 `lower_case_table_names = 1`,然后保存重载配置重启服务。可以用如下命令进行设置: ```bash cd /etc sudo vim my.cnf ``` 此时点击 `A` 键触发编辑命令,找到 `[mysqld]` 在下边输入 `lower_case_table_names = 1`,之后按下键盘左上角的 `esc` 键,然后输入 `:wq` 表示保存并退出,最后重启 mysql 服务: ```bash service mysql restart ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Noobovo

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值