当前版本: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. 问题的主要背景
MySQL 8.0.33
版本,搭建了主从复制
,需要借助中间件实现读写分离操作- 使用了
Mycat-server-1.6.7.6-release-20220524173810-win.tar
作为连接MySQL的门面,连接端口为8066,并完成了正常配置 - 使用
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. 具体解决方案如下
MyCat 修改server.xml中的fakeMySQLVersion为8.0以上可以解决这个问题
,不需要修改源代码,jdbc就可以连接Shardingsphere-proxy只需要修改server.xml文件中的props中的proxy-mysql-default-version为8.0以上同样可以解决这个问题
,jdbc也可以直接连接
注意navicat可能会有schema的异常,但是五官紧要!!!