chown: `mysql': invalid user_Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限的问题解决...

分享一个最近在整Flyway时候碰到的一个问题,以及对应的一些解决方案。如果您还不知道Flyway,建议可以先看一下这篇文章Spring Boot中使用Flyway来管理数据库版本

问题描述

问题出现所描述的工程所用版本信息如下:

Spring Boot:2.1.3

Flyway:5.2.4(非特别指定,随Spring Boot的素材版本管理)

具体错误:在Spring Boot中整和Flyway之后,本地执行ok,但在部署环境出现了这样的错误:

java.sql.SQLSyntaxErrorException: SELECT command denied to user 'test'@'10.10.8.101' for table 'user_variables_by_thread'

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)

at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)

at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)

at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003)

at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:227)

at org.flywaydb.core.internal.jdbc.JdbcTemplate.queryForStringList(JdbcTemplate.java:119)

at org.flywaydb.core.internal.database.mysql.MySQLConnection.hasUserVariableResetCapability(MySQLConnection.java:84)

at org.flywaydb.core.internal.database.mysql.MySQLConnection.(MySQLConnection.java:54)

at org.flywaydb.core.internal.database.mysql.MySQLDatabase.doGetConnection(MySQLDatabase.java:162)

at org.flywaydb.core.internal.database.mysql.MySQLDatabase.doGetConnection(MySQLDatabase.java:40)

at org.flywaydb.core.internal.database.base.Database.getConnection(Database.java:122)

at org.flywaydb.core.internal.database.base.Database.getMainConnection(Database.java:315)

at org.flywaydb.core.Flyway.prepareSchemas(Flyway.java:550)

at org.flywaydb.core.Flyway.execute(Flyway.java:487)

at org.flywaydb.core.Flyway.migrate(Flyway.java:149)

at com.yonghui.beanstalk.config.flyway.FlywayConfig.migrate(FlywayConfig.java:25)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at

分析与解决

解决方法一:开权限

从报错信息看,就是test用户对user_variables_by_thread表没有select权限导致。

所以,最直接的解决方法就是给对应用户设置权限即可。

解决方法二:修改Flyway版本

如果你对这个环境的MySQL没有管理权限的时候怎么办呢?

可以看到,这个问题官方有对其进行修复,并且修复版本就是5.2.4,但是很多国外友人跟我们一样,似乎在这个版本并没有解决问题:

AAffA0nNPuCLAAAAAElFTkSuQmCC

尝试了5.2.4之后的各种版本(包括最新的6.x版本),都未能解决这个问题。

后面留意到了这个留言:

AAffA0nNPuCLAAAAAElFTkSuQmCC

原来这个问题是5.2.2版本之后才开始出现的,那么顺势尝试一下5.2.1版本!

果然,替换这个版本后,就一切正常了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值