一, 问题
MyCat 是一个基于 MySQL 协议的开源的分布式中间件, 其核心是分库分表.
但是目前 MyCat 仍主要面对 MySQL 5.5, 5.6, 5.7 版, 对最新的 MySQL 8 尚未完全支持, 需要用户对 MySQL 8 和 MyCat 的配置进行一系列的修改.
根据自己的测试结果, 对这些修改进行简要的总结.
二, 关于 MySQL 8
主要是修改 MySQL 配置文件, 在 Windows 平台是 my.INI, 在 Linux 平台是 my.cnf:
修改缺省加密方式: 在安装完 MySQL 8 后, 需将缺省的加密方式修改为 mysql_native_password, 以保持与 5.x 版本兼容.
如果是在 Linux 平台, 在首次启动前设置 lower_case_table_names = 1(表名大小写不敏感), 注意一旦数据库中已有数据, 再如此设置会导致启动 MySQL 失败.
为防止出现字符集不匹配, 最好也显式设置字符集 (可选).
以下是本人使用的 my.cnf:
- [mysqld]
- ...
- default-authentication-plugin=mysql_native_password
- lower_case_table_names=1
- character-set-server=utf8
- [MySQL]
- default-character-set=utf8
三, 关于 MyCat
主要涉及三个方面.
登录逻辑库的方式
Mycat 登录逻辑库的传统方式是: MySQL -uroot -p -h127.0.0.1 -P8066 -DTESTDB
但对于 MySQL 8, 会报密码错误方式, 这是由于 MySQL 8 的缺省加密方式已经改为 caching_sha2_password, 而 MyCat 对此尚不支持. 为此, 需加上 --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"
四, 其它
前一个实验里, Mycat 用 JDBC 连接 PostgreSQL 等数据库时, 发现无法实现二级子表的自动分片. 但对于 MySQL 8, 二级子表的自动分片正常, 没有问题.
来源: http://www.linuxidc.com/Linux/2019-07/159593.htm