mysql jdbc驱动中的通信链路故障
Posted
技术标签:
【中文标题】mysql jdbc驱动中的通信链路故障【英文标题】:Communication link failure in mysql jdbc driver 【发布时间】:2021-08-23 10:43:52 【问题描述】:我无法使用此代码从 java 建立与 mysql 的连接
Connection con=null;
String dbUrl="jdbc:mysql://localhost:3300/sys?useSSL=true";
String driver = "com.mysql.cj.jdbc.Driver";
String userName = "root";
String password = "cool123";
Class.forName(driver).getDeclaredConstructor().newInstance();
con = DriverManager.getConnection(dbUrl,userName,password);
它向我抛出了这个错误The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. The driver has not received any packets from the server. No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
【问题讨论】:
你的错误中是否有causeby子句?您无法连接到正在运行的 mysql 实例。它在运行吗?用户名/密码是否正确?有防火墙吗? @SusanMustafa 用户名和密码正确但是我使用的是 *** 有什么关系吗? 3300 是使用的正确端口吗?一般是3306 @SusanMustafa 是的 尝试从命令行(不使用 java)telnet 到它 telnet localhost 3300 或 telnet localhost 3306 看看是否可以连接。如果您可以连接,则需要查看代码中的其他内容....但如果您无法 telnet,则它是您的网络/*** 【参考方案1】:您正在尝试使用传输层安全性(TLS 或 SSL)连接到您的服务器。那是因为你的连接字符串是?useSSL=true
。当您连接到localhost
时,这有点奇怪——没有传输进出您的 Java 程序运行的服务器,因此使用 TLS 会花费大量额外的计算周期而没有太多好处,如果您甚至可以让它工作的话.
您的错误消息提示 TLS 不起作用(协议被禁用或密码套件不合适是 TLS 行话。)
试试这个连接字符串:jdbc:mysql://localhost:3300/sys
(无 TLS)。它可能会起作用。
然后试试这个连接字符串 jdbc:mysql://localhost:3306/sys
。它使用默认值。
设置 MySQL 服务器以使用 TLS takes some server engineering work and knowledge。可能没有正确完成。如果有人为您这样做,请向该人寻求帮助。
【讨论】:
是的,我的数据库配置有问题,因为当我在 MAMP 服务器上运行它时,它运行良好。以上是关于mysql jdbc驱动中的通信链路故障的主要内容,如果未能解决你的问题,请参考以下文章
使用 JDBC 和 MySQL 解决“通信链路故障”[重复]
Android:com.mysql.jdbc.exceptions.jdbc4.communicationsexception 通信链路故障
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障
.com.mysql.jdbc.exception.jbbc4.communicationexception..通信链路故障
com.mysql.cj.jdbc.exceptions.CommunicationsException:aws cicd 管道构建期间的通信链路故障
Glassfish4 和 MySQL 5.5.38 远程服务器:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障