Flyway 執(zhí)行報(bào)錯(cuò): 'user_variables_by_thread' 表沒有SELECT權(quán)限的問題解決

分享一個(gè)最近在整Flyway時(shí)候碰到的一個(gè)問題,以及對(duì)應(yīng)的一些解決方案。如果您還不知道Flyway,建議可以先看一下這篇文章Spring Boot中使用Flyway來管理數(shù)據(jù)庫(kù)版本

問題描述

問題出現(xiàn)所描述的工程所用版本信息如下:

  • Spring Boot:2.1.3
  • Flyway:5.2.4(非特別指定,隨Spring Boot的素材版本管理)

具體錯(cuò)誤:在Spring Boot中整和Flyway之后,本地執(zhí)行ok,但在部署環(huán)境出現(xiàn)了這樣的錯(cuò)誤:

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 

分析與解決

解決方法一:開權(quán)限

從報(bào)錯(cuò)信息看,就是test用戶對(duì)user_variables_by_thread表沒有select權(quán)限導(dǎo)致。

所以,最直接的解決方法就是給對(duì)應(yīng)用戶設(shè)置權(quán)限即可。

解決方法二:修改Flyway版本

如果你對(duì)這個(gè)環(huán)境的MySQL沒有管理權(quán)限的時(shí)候怎么辦呢?

針對(duì)這個(gè)問題,其實(shí)在Github上有很多Issue討論,比如:https://github.com/flyway/flyway/issues/2215。

可以看到,這個(gè)問題官方有對(duì)其進(jìn)行修復(fù),并且修復(fù)版本就是5.2.4,但是很多國(guó)外友人跟我們一樣,似乎在這個(gè)版本并沒有解決問題:

file

嘗試了5.2.4之后的各種版本(包括最新的6.x版本),都未能解決這個(gè)問題。

后面留意到了這個(gè)留言:

file

原來這個(gè)問題是5.2.2版本之后才開始出現(xiàn)的,那么順勢(shì)嘗試一下5.2.1版本!

果然,替換這個(gè)版本后,就一切正常了!

歡迎關(guān)注我的公眾號(hào):程序猿DD,獲得獨(dú)家整理的學(xué)習(xí)資源和日常干貨推送。
如果您對(duì)我的專題內(nèi)容感興趣,也可以關(guān)注我的博客:didispace.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容