19

Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限问...

 4 years ago
source link: http://blog.didispace.com/flyway-user-variables-by-thread/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

分享一个最近在整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.<init>(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没有管理权限的时候怎么办呢?

针对这个问题,其实在Github上有很多Issue讨论,比如: https://github.com/flyway/flyway/issues/2215

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

aqy2emU.png!web

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

后面留意到了这个留言:

nqaEfuI.png!web

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK