Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限的问题解决

雾绡容器
• 阅读 3035

分享一个最近在整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,但是很多国外友人跟我们一样,似乎在这个版本并没有解决问题:

Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限的问题解决

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

后面留意到了这个留言:

Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限的问题解决

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

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

欢迎关注我的公众号:程序猿DD,获得独家整理的学习资源和日常干货推送。
如果您对我的专题内容感兴趣,也可以关注我的博客:didispace.com
点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Stella981 Stella981
3年前
Spring Boot中使用Flyway来管理数据库版本
久违了的SpringBoot系列,今天抽空更新一篇。去年写过很多篇关于数据访问的文章了,比如下面这些:使用JdbcTemplate(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.didispace.com%2Fspringbootdata1%2F)
Stella981 Stella981
3年前
Spring Boot 2.x基础教程:使用Flyway管理数据库版本
之前已经介绍了很多在SpringBoot中使用MySQL的案例,包含了SpringBoot最原始的JdbcTemplate(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.didispace.com%2Fspringbootlearning2131%2F)、Spr
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
SpringBoot 整合 Flyway
1、启动时migration,在dependencies增加flyway<!https://mvnrepository.com/artifact/com.google.guava/guava<dependency<groupIdcom.google
Wesley13 Wesley13
3年前
mysql查询每个学生的各科成绩,以及总分和平均分
今天看一个mysql教程,看到一个例子,感觉里面的解决方案不是很合理。问题如下:有学生表:!在这里插入图片描述(https://oscimg.oschina.net/oscnet/07b001b0c6cb7e0038a9299e768fc00a0d3.png)成绩表:!在这里插入图片描述(https://oscimg.o
Stella981 Stella981
3年前
Flyway 助力数据库脚本自动化管理攻略
原文地址:梁桂钊的博客(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.720ui.com%2F2019%2Fflyway_helper_doc%2F)博客地址:http://blog.720ui.com(https://www.oschina.net/act
Wesley13 Wesley13
3年前
mysql explain执行详解
!(https://oscimg.oschina.net/oscnet/c6df6d3229fc511bc625bc3a89f58c7b0ce.png)1)、id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询。2)、select\_type列常见的有:A:
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究