大佬们遇到过这个问题吗?mac 下jdbc连接mysql 8.0 失败

问题描述
mac下无法使用jdbc连接mysql8.0
Mysql环境
debian9虚拟机
mysqlVer8.0.16forLinuxonx86_64(MySQLCommunityServer-GPL)#已经允许远程连接
尝试方法
Mac下使用IDEA,Datagrip均无法连接到虚拟机。Mac与虚拟机在同一网段,192.168.0.x,未使用代理连接。但是可以使用tableplus,mysqlworkbench等工具连接。
预测为jetbrains产品有问题。测试在另外一台windows系统下,使用datagrip连接mysql,成功连接。预测mac环境有问题。编写jdbc代码测试
依赖
mysql
mysql-connector-java
8.0.16
代码
publicstaticvoidmain(String[]args){
Connectionconn=null;
try{
StringuserName="root";
Stringpassword="root";
Stringurl="jdbc:mysql://192.168.0.115:3306/mysql";
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
conn=DriverManager.getConnection(url,userName,password);
System.out.println("connection");
}catch(Exceptione){
System.out.println("error");
e.printStackTrace();
}finally{
if(conn!=null){
try{
conn.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
}
报错
com.mysql.cj.jdbc.exceptions.CommunicationsException:Communicationslinkfailure
Thelastpacketsentsuccessfullytotheserverwas0millisecondsago.Thedriverhasnotreceivedanypacketsfromtheserver.
atcom.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
atcom.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
atcom.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
atcom.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:455)
atcom.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
atcom.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
atjava.sql.DriverManager.getConnection(DriverManager.java:664)
atjava.sql.DriverManager.getConnection(DriverManager.java:247)
atcom.mysql.driver.MysqlDriver.main(MysqlDriver.java:23)
Causedby:com.mysql.cj.exceptions.CJCommunicationsException:Communicationslinkfailure
Thelastpacketsentsuccessfullytotheserverwas0millisecondsago.Thedriverhasnotreceivedanypacketsfromtheserver.
atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)
atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
atjava.lang.reflect.Constructor.newInstance(Constructor.java:423)
atcom.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
atcom.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
atcom.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
atcom.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
atcom.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:562)
atcom.mysql.cj.protocol.a.NativeProtocol.readServerCapabilities(NativeProtocol.java:514)
atcom.mysql.cj.protocol.a.NativeProtocol.beforeHandshake(NativeProtocol.java:404)
atcom.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1450)
atcom.mysql.cj.NativeSession.connect(NativeSession.java:165)
atcom.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
atcom.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
...6more
Causedby:java.io.EOFException:Cannotreadresponsefromserver.Expectedtoread4bytes,read0bytesbeforeconnectionwasunexpectedlylost.
atcom.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67)
atcom.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63)
atcom.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45)
atcom.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:556)
...12more
通用代码在windows下测试是成功连接的。感觉问题不在mysql服务器上,应该是mac下jdbc连接mysql8.0有问题,网上搜了很多,没有解决。到这里就没有头绪了。macjava环境
javaversion"1.8.0_201"
Java(TM)SERuntimeEnvironment(build1.8.0_201-b09)
JavaHotSpot(TM)64-BitServerVM(build25.201-b09,mixedmode)
不负相思意
浏览 1398回答 2
2回答

心有法竹

1、MySQL8.0有新的安全认证机制,具体可查看官方文档2、目前很多数据库可视化工具尚不支持MySQL8.0的新安全认证机制3、最简单的解决办法是在安装dmg包的时候有选项,可降级安全认证方式,可选择连接到数据库的认证方式
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript