0

我是从 Spring Boot 应用程序连接 Azure MySQL 数据库的新手。

以下是中提到的片段application.properties

    spring.datasource.url=jdbc:mysql://XXXX.mysql.database.azure.com:3306/MyDbName
spring.datasource.username= ******
spring.datasource.password= ******

我遇到了以下异常

org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Unknown system variable 'query_cache_size'

我用谷歌搜索过,有人提到需要将MySQLConnector的版本更新为8.0.13

请帮我找到解决方案。

4

2 回答 2

0

我也曾在 azure MySQL 上遇到过这种快乐。正如 dvo 提到的,当它认为它在版本 8.0.3 下时,它会放置这个变量。

来自 com.mysql.cj.NativeSession.java...

if (!versionMeetsMinimum(8, 0, 3)) {
    queryBuf.append(", @@query_cache_size AS query_cache_size");
    queryBuf.append(", @@query_cache_type AS query_cache_type");
}

但是由于我的 Azure MySQL 版本是 8.0.15,它与我的驱动程序版本匹配,所以我怀疑虽然数据库很可能是驱动程序处理的堆栈的第 8 版部分,但它不是。

编辑:

来自https://docs.microsoft.com/en-us/azure/mysql/concepts-limits

当前已知问题

MySQL 服务器实例在建立连接后显示错误的服务器版本。要获取正确的服务器实例引擎版本,请使用 select version(); 命令。

所以我猜这就是问题所在,Azure MySQL 8 不能与 java mysql 连接器一起使用。

我可能会考虑自己构建连接器并将版本号硬编码为 8.0.15。多么快乐。

编辑编辑:

修改 ServerVersion.java parseVersion(...) 以返回

return new ServerVersion(8, 0, 15);

解决这个问题足以让我继续我的工作。

这是微软应该尽快解决的问题。

于 2019-09-28T15:28:55.763 回答
0

根据您的异常,这不是因为 Azure mysql。这是因为系统变量'query_cache_size'。参考:java.sql.SQLException:未知系统变量'query_cache_size'

于 2019-09-09T14:18:34.350 回答