SpringBoot连接Vitess MySQL集群报Unknown system variable 'query_cache_size'错误
问题原因
- MySQL 8.0版本起官方已经完全移除查询缓存功能,
query_cache_size、query_cache_type两个系统变量同步被废弃删除 - mysql-connector-java 8.0.x版本在初始化连接阶段,会默认查询服务端系统变量,其中包含已被删除的
query_cache_size参数 - Vitess 12.0.0版本的VTGate/Vttablet默认没有对MySQL 8.0已删除的变量做兼容处理,收到相关查询请求时直接抛出未知系统变量错误,导致连接初始化失败
解决方案
方案1:调整JDBC连接配置(无需修改服务端,生效最快)
在Spring Boot的spring.datasource.url配置末尾追加以下参数即可:
&queryCacheSize=0&useInformationSchema=true
完整url参考示例:
jdbc:mysql://<VTGate服务地址>:<端口>/<逻辑库名>?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&queryCacheSize=0&useInformationSchema=true
该配置会让mysql-connector-java跳过查询query_cache相关系统变量,直接使用给定的默认值,避免发送不存在的变量查询请求。
方案2:调整Vitess VTGate启动参数(推荐,全局生效)
给VTGate服务新增启动参数:
-mysql_server_version=8.0.27
VTGate启动时指定模拟的MySQL版本后,接收到query_cache_size这类MySQL 8.0已废弃的变量查询时,会直接返回默认值0而非报错,可兼容所有应用端的连接请求。
方案3:升级Vitess版本
如果运维条件允许,可将Vitess集群升级到13.0及以上版本,该版本区间已默认优化了对MySQL 8.0废弃变量的兼容处理,无需额外配置即可正常对接mysql-connector-java 8.x版本。
内容的提问来源于stack exchange,提问作者NPS
相关产品推荐
相关产品推荐

