Mycat 目前还未全面支持 MySQL 8 以上的版本, 可能会导致一些问题, 例如 Mycat 连接 MySQL 8 时可能会报密码错误, 因为新版的密码加密方式与旧版不一样. 还有就是时区问题, 新版的连接方式需要增加时区参数. 除此之外, 可能还会有一些其他问题. 因此, 我们需要更改 Mycat 的一些配置, 让其能正常连接 MySQL 8.x.
下载 8.x 版本的驱动
首先需要下载 8.x 版本的驱动, Mycat 默认的 MySQL 驱动版本为 5.x. 到 maven 中央仓库上复制 8.x 驱动 jar 包的下载地址, 然后到 Linux 上使用 wget 命令进行下载:
- [[email protected] ~]# cd /usr/local/src
- [[email protected] /usr/local/src]# wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar
将驱动包移动到 mycat 的 lib 目录下, 并删除原本的 5.x 驱动包:
- [[email protected] /usr/local/src]# mv MySQL-connector-java-8.0.18.jar /usr/local/mycat/lib/
- [[email protected] /usr/local/src]# rm -rf /usr/local/mycat/lib/MySQL-connector-java-5.1.35.jar
接着使用 chmod 命令设置该驱动包的权限:
[[email protected] /usr/local/mycat]# chmod 777 lib/MySQL-connector-java-8.0.18.jar
修改 schema.xml
修改位于 conf 目录下的 schema.xml 配置文件, 目的是更改 Mycat 连接 MySQL 的方式:
[[email protected] /usr/local/mycat]# VIM conf/schema.xml
修改 dataHost 标签中的 dbDriver 属性为 jdbc, 以及修改 writeHost 标签中的 url 属性:
- <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
- writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
- <heartbeat>select user()</heartbeat>
- <writeHost host="hostM1"
- url="jdbc:mysql://192.168.130.28:3306?useSSL=false&serverTimezone=GMT+8"
- user="root"
- password="123456">
- </writeHost>
- </dataHost>
修改 server.xml
修改位于 conf 目录下的 server.xml 配置文件:
[[email protected] /usr/local/mycat]# VIM conf/server.xml
将 useHandshakeV10 设置为 1, 如果没该标签则添加即可:
- <system>
- <property name="useHandshakeV10">1</property>
- ...
- </system>
重启 Mycat 并测试
重启 Mycat:
- [[email protected] /usr/local/mycat]# mycat stop
- Stopping Mycat-server...
- Stopped Mycat-server.
- [[email protected] /usr/local/mycat]# mycat start
- Starting Mycat-server...
- [[email protected] /usr/local/mycat]#
在测试能否正常连接 Mycat 时又遇到了另一个问题, 使用 MySQL 8.x 的客户端工具连接 Mycat 报了个密码错误:
- [[email protected] ~]# MySQL -uroot -p -P9066 -h127.0.0.1
- Enter password:
- ERROR 1045 (HY000): Access denied for user 'root', because password is error
- [[email protected] ~]#
同样, 这也是因为 MySQL 8 以上的版本与之前版本的密码加密方式不一样. 而 Mycat 目前还是只支持 5.x 版本的加密方式, 所以使用 8 以上版本的 MySQL 客户端工具连接 Mycat 时就会报密码错误.
解决方式主要有两种, 一是指定 MySQL 客户端连接时的加密方式. 如下示例:
[[email protected] ~]# MySQL -uroot -p -P9066 -h127.0.0.1 --default-auth=mysql_native_password
二是采用 5.x 版本的 MySQL 客户端工具来连接 Mycat. 如下示例:
[[email protected] /usr/local/MySQL-5.7.28]# bin/MySQL -uroot -p -P9066 -h127.0.0.1
来源: http://www.bubuko.com/infodetail-3376978.html