• 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的异常,但是五官紧要!!!

  • 相关阅读:
    SaaSBase:什么是SaleSmartly?
    【教师资格证考试综合素质——法律专项】教育法笔记以及练习题
    黑马点评--优惠卷秒杀
    无心剑汉英双语诗003. 《书海》
    写给开发人员的实用密码学(五)—— 密钥交换 DHKE 与完美前向保密 PFS
    Hive常用DDL操作
    Python3中使用argparse模块解析命令行参数
    面试打底稿⑥ 项目一的第二部分
    docker底层实现
    MES系统物料管理的五大功能,建议收藏
  • 原文地址:https://blog.csdn.net/weixin_45492007/article/details/130898544