MyCat|Shardingsphere-proxy:jdbc连接MySQL8.0.33的query_cache_size异常解决方案

当前版本:MySQL 8.0.33 ,Mycat-server-1.6.7.6-release-20220524173810-win,apache-shardingsphere-5.3.2-shardingsphere-proxy-bin,jdk 1.8

1. 问题的主要背景

  1. MySQL 8.0.33版本,搭建了主从复制,需要借助中间件实现读写分离操作
  2. 使用了Mycat-server-1.6.7.6-release-20220524173810-win.tar 作为连接MySQL的门面,连接端口为8066,并完成了正常配置
  3. 使用java的jdbc连接却报错了:java.sql.SQLException: Unknown system variable 'query_cache_size'

2. 解决过程

本人的解决方法如下:

本人通过查询过很多文章,并尝试了其中的代码(网上还有人修改源码吐了),但是无法解决该问题。通过分析发现query_cache_size是在8.0版本中被移除了(其实这个是一个小问问题,就是框架突然查询了这个数据导致的异常错误,只是这个异常被框架抛出给了jdbc连接导致不能查询数据!)

事情的转机:

由于一次偶然的机会在使用apache-shardingsphere-5.3.2-shardingsphere-proxy-bin也出现了相同的错误,也是爆出了这个异常也是无法解决(但是突然想到shardingsphere中的lib是没有mysql的驱动的),所以必然也会碰到这个问题,这个问题肯定已经是解决了的

在这里插入图片描述

若是官方没有没有解决这个问题是不可能发布的!所以一定有配置项可以规避这个问题,就是不执行查询query_cache_size变量的方法

通过本人查找发现shardingsphere-proxy中有一个配置项(是server.yaml文件)可以修改(就是mysql的版本)?,配置项(proxy-mysql-default-version)中添加版本给人看?这里可能有其他用法
在这里插入图片描述
突然灵光一闪,修改一下这个,然后重新测试发现成功了!!!

后面的就是联想到MyCat,发现这个更加奇怪,lib库中居然直接使用8.0.25的驱动程序

在这里插入图片描述

所以MyCat实际上已经解决了这个问题,不然为什么人家直接放8.0.25的驱动程序,所以MyCat必然有与shardingsphere-proxy,相同的关系修改并避免这个问题。

经过查看配置项发现了如下
在这里插入图片描述
居然模拟MySQL的版本号,尝试修改一下:
在这里插入图片描述

测试成功了

3. 具体解决方案如下

  1. MyCat 修改server.xml中的fakeMySQLVersion为8.0以上可以解决这个问题,不需要修改源代码,jdbc就可以连接
  2. Shardingsphere-proxy只需要修改server.xml文件中的props中的proxy-mysql-default-version为8.0以上同样可以解决这个问题,jdbc也可以直接连接

注意navicat可能会有schema的异常,但是五官紧要!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值