navicat無法連接mycat,報錯找不到數據庫

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&amp;serverTimezone=UTC&amp;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,如下圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章