【MySQL附录】A5:MyCat连接MySQL8.x的报错及处理

一、背景

MyCat是一个基于MySQL协议的开源的分布式中间件,其核心是分库分表。但是目前MyCat(例如1.6.7.1版本)仍主要面对MySql 5.5, 5.6, 5.7版,对最新的MySql 8尚未完全支持,需要用户对MySQL 8和MyCat的配置进行少量修改,否则无法成功连接到Mysql。对这些修改进行简要的总结。

本文为转载,修改了原文文字和个别不清晰的地方。

二、关于MySql 8

主要是修改Mysql配置文件,在Windows平台是my.ini,在linux平台是my.cnf(我的位置为/etc/my.cnf):

  • 修改缺省加密方式:Mysql 8的缺省加密方式已经改为caching_sha2_password, 保持与低版本兼容,需要修改为mysql_native_password
  • 如果是在Linux平台,在首次启动前设置lower_case_table_names = 1(表名大小写不敏感),注意一旦数据库中已有数据,再如此设置会导致启动mysql失败。
  • 为防止出现字符集不匹配,最好也显式设置字符集(可选)。

以下是本人使用的/etc/my.cnf:

[mysqld]
# ..省略部分内容 .
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
default-authentication-plugin=mysql_native_password
lower_case_table_names=1
character-set-server=utf8

socket=/var/lib/mysql/mysql.sock
# ..省略后续部分内容

三、关于MyCat(以下内容待验证)

主要涉及三个方面。

  • 登录数据库的方式

Mycat登录数据库类似于:mysql -uroot -p -h127.0.0.1 -P8066 -DTESTDB

但对于MySql 8,这样报密码错误方式,这是由于Mysql 8服务端缺省加密方式已经改为caching_sha2_password,而MyCat对此尚不支持(还是mysql客户端8.0以前的密码加密方式)。为此,需加上--default_auth=mysql_native_pasowrd选项:

mysql -uroot -p -h127.0.0.1 -P8066 -DTESTDB --default_auth=mysql_native_pasowrd

这样才能成功登录逻辑库。

  • 替换自带的JDBC驱动jar

MyCat自带的JDBC驱动jar还是5.1.x版的,若使用JDBC连接MySql 8,会报错“java.sql.SQLException: Unknown system variable 'query_cache_size'”。必须用8.0.x版的JDBC驱动jar代替才行,下载地址是:

http://central.maven.org/maven2/mysql/mysql-connector-java/8.0.11/ mysql-connector-java-8.0.11.jar

  • 修改jdbc时的url

如果dataHost的driverType为JDBC,则还需要修改url,增加useSSL=false和serverTimezone=UTC选项,某些情况下还需加上characterEncoding=utf8选项(可选),例如:

url="jdbc:mysql://192.168.64.187:3306?useSSL=false&serverTimezone=UTC&characterEncoding=utf8"

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值