mysql8 Could not retrieve transation read-only status server


想回顧下ssm,看着網上別的帖子手動搭了一個,一直報Could not retrieve transation read-only status server , java.sql.SQLException Unknown system variable 'query_cache_size',這兩個錯.

網上的帖子都是驅動版本不對,折騰了一整天,驅動版本改了,mysql都重新安裝了一遍,最后在我無望的時候,翻到一個帖子...終於爬出了這個坑

 

【友情提示:不想看我廢話的請直接到文章末尾查看解決方法】

 

詳細信息:
嚴重 [http-nio-8080-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [mvc-dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Unknown system variable 'query_cache_size')
### The error may exist in config/mybatis/sqlXml/article.xml
### The error may involve org.devsong.dao.IArticle.getSiteMapData
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Unknown system variable 'query_cache_size')] with root cause
 java.sql.SQLException: Unknown system variable 'query_cache_size'
... ...

  

上面的錯誤看起來是不是很熟悉,沒錯,上面的錯誤在以前升級MySQL的時候,是由於數據庫連接驅動版本過低,與數據庫不匹配。這處理起來很簡單,我也遇到過多次了,直接升級mysql-connector版本就行了。你如果在網上搜索上面的錯誤的話,絕大部分的解決方法也都是升級驅動。

想着已經非常眼熟這個異常了,於是我以一個老司機的姿態像往常一樣更新了Maven依賴配置,像什么都沒發生過一樣重新部署了項目。嘀嘀嘀...錯誤代碼500...我趕緊打開后台看異常信息,我的乖乖,怎么還是上面那個異常,明明更新了驅動的呀。。。至此老司機翻車

我連滾帶爬地打開代碼,尋找着錯誤,看了一下Spring相關配置,沒問題,看了一下數據庫配置文件,沒問題。於是我開始猜想是不是其他和數據庫相關的東西也該升級了,就這樣,我把數據庫連接池、Spring-jdbc等能升級的都升級。想着異常一定能解決,於是我再一次部署了項目,內心忐忑的我再一次翻車:嘀嘀嘀...錯誤代碼500。。。

連翻兩次車之后,我決定放棄自己折騰了,老老實實去看文檔。我搬出了常年不用的梯子,爬到了牆外,在一個角落里,我看到了某些東西:從MySQL8.0開始,已經支持將驅動寫為com.mysql.cj.jdbc.Driver。在配置數據庫連接的時候,需要加上時區配置。我抱着試一試的心態,修改了一下JDBC配置,在我以為又會失敗時,嘀嘀嘀,成功。。。

下面是舊版配置和新版配置的對比:

#### 舊 版 #### jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=root #### 新 版 #### jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC jdbc.username=root jdbc.password=root

網上說驅動寫為com.mysql.jdbc.Driver 或者 com.mysql.cj.jdbc.Driver 都行,但我實際測試必須寫為后者才行,並且serverTimezone的設置也不能少,二者缺一不可,少一個就翻車。

更新驅動在這里補充下,pom默認最新版本的.如果上面不行

pom.xml上加上mysql的版本

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>

總結:
(1)更新驅動
(2)更改jdbc配置 --> driver名、serverTimezone


附:
你在折騰的時候或許重裝過MySQL,如果你在卸載重裝的過程中發現Windows服務中充斥着多個MySQL,想刪除的話: Win + R  >> CMD >> sc delete 服務名

 

 

轉載自:https://www.devsong.org/article/102


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM