navicat无法连接mycat,报错找不到数据库

mycat无法连接到mysql

  • 1、 问题
  • 2、锁定问题
  • 3、解决问题

1、 问题

首先说下我遇到的问题,我是最近打算了解mycat,遂在自己电脑上安装了mycat,在经过一番配置之后,无论是命令窗口还是navicat都无法连城成功,总是报没有数据库的错误,以下是mycat版本
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw==
这是我的MySQL版本:

2、锁定问题

刚开始的时候,我以为是配置文件有问题,以下是我的配置文件,首先上server.xml的配置,这个没啥好说的,用户名和密码,以及逻辑库名,这里用的是默认的TESTDB,也可以改成自己需要的,

<user name="root" defaultAccount="true">
		<property name="password">root</property>
		<property name="schemas">TESTDB</property>
		
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>

接下来贴出schema.xml,这是核心配置文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="10">
		<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
		<table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
	</schema>
	<dataNode name="dn1" dataHost="localhost" database="db1" />
	<dataNode name="dn2" dataHost="localhost" database="db2" />
	<dataNode name="dn3" dataHost="localhost" database="db3" />
	<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
	<dataNode	name="jdbc_dn2" dataHost="jdbchost" database="db2" />
	<dataNode name="jdbc_dn3" 	dataHost="jdbchost" database="db3" /> -->
	<dataHost name="localhost" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"> 
		<heartbeat>select user();</heartbeat>
		<writeHost host="hostM1" url="localhost:3306" user="root" password="root"></writeHost>
	</dataHost>
</mycat:schema>

经多次检查,没有发现问题,于是去查看mycat 的日志文件,发现有以下信息:

WARN [$_NIOREACTOR-0-RW] (io.mycat.backend.mysql.nio.MySQLConnectionAuthenticator.handle(MySQLConnectionAuthenticator.java:91)) - can't connect to mysql server ,errmsg:Client does not support authentication protocol requested by server; consider upgrading MySQL client MySQLConnection [id=12, lastTime=1565574804387, user=root, schema=db3, old shema=db3, borrowed=false, fromSlaveDB=false, threadId=6185, charset=utf8, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=localhost, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

这是没有连接mysql,于是猜测是不是版本问题,检查mycat的jar包,发现mysql-connector-java-5.1.35.jar,这个版本的jar包连接mysql8肯定会失败,换成mysql-connector-java-8.0.16.jar,本以为就可以连接成功,但是还是报错,继续排查…
终于在网上找到mycat尚未完全支持mysql8,如果要使用修改一些配置文件,这里我用的是另一种方式,修改mycat的连接方式,之前使用的是native,现在改为jdbc,这种方式不用修改太多文件,相对而言比较简单,有兴趣的小伙伴可以去修改mysql的配置文件,让native也可以正常访问,欢迎成功之后留下评论。

3、解决问题

下面贴出我修改后的schema.xml文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="10">
		<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
		<table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
	</schema>
	<dataNode name="dn1" dataHost="localhost" database="db1" />
	<dataNode name="dn2" dataHost="localhost" database="db2" />
	<dataNode name="dn3" dataHost="localhost" database="db3" />
	<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
	<dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />
	<dataNode name="jdbc_dn3" 	dataHost="jdbchost" database="db3" /> -->
	<dataHost name="localhost" 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://localhost:3306?useSSL=false&serverTimezone=UTC&characterEncoding=utf8" user="root" password="root">
			<!-- can have multi read hosts -->
			<!--<readHost host="hostS2" url="127.0.0.1:3306" user="root" password="xxx" />-->
		</writeHost>
	</dataHost>
</mycat:schema>

修改之后,成功通过navicat访问mycat,如下图:
navicat无法连接mycat,报错找不到数据库_第1张图片

你可能感兴趣的:(mysql,mycat)