提问人:Josh K 提问时间:6/6/2010 最后编辑:Eric LeschinskiJosh K 更新时间:7/30/2023 访问量:981948
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路失败
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
问:
我正在努力让我的数据库与我的 Java 程序对话。
有人可以给我一个使用 JDBC 的快速而肮脏的示例程序吗?
我得到了一个相当惊人的错误:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at SqlTest.main(SqlTest.java:22)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
... 12 more
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:218)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
... 13 more
测试文件的内容:
import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlTest {
public static void main(String [] args) throws Exception {
// Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// // edit the jdbc url
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/projects?user=user1&password=123");
// Statement st = conn.createStatement();
// ResultSet rs = st.executeQuery( "select * from table" );
System.out.println("Connected?");
}
}
答:
在 Mysql 下载 MySQL-JDBC-Type-4-Treiber(即从“mysql-connector-java-5.1.11”.jar“下载”mysql-connector-java-5.1.11-bin.zip)。
您需要在编译和运行时将驱动程序 jar 引入类路径。
Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );
评论
我可能在这里吠错了树,但您的异常似乎表明您的 MySQL 服务器不可用。
线程“main”com.mysql.jdbc.exceptions.jdbc4.CommunicationsException中的异常: 通信链路故障成功发送到服务器的最后一个数据包为 0 毫秒前。驱动程序未从服务器收到任何数据包。在。。。
如果您尝试(从终端)会发生什么
mysql -u username -p
系统将提示您输入与用户名关联的密码。输入正确的密码后,mysql客户端会连接吗?
如果没有,您可能需要从首选项启动MySQL。您也可以将其设置为在启动时运行。
评论
localhost
所以,你有一个
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路失败
java.net.ConnectException:连接被拒绝
我引用了这个答案,其中还包含一个分步的MySQL + JDBC教程:
如果您获得特定于 或 或 MySQL 的 ,则意味着根本无法访问数据库。这可能有以下一个或多个原因:
SQLException: Connection refused
Connection timed out
CommunicationsException: Communications link failure
- JDBC URL 中的 IP 地址或主机名错误。
- JDBC URL 中的主机名无法被本地 DNS 服务器识别。
- JDBC URL 中的端口号缺失或错误。
- DB服务器已关闭。
- DB Server不接受TCP/IP连接。
- DB Server连接已用完。
- 介于 Java 和 DB 之间的某些东西正在阻止连接,例如防火墙或代理。
要解决其中一个问题,请遵循以下建议:
- 使用 验证和测试它们。
ping
- 刷新 DNS 或改用 JDBC URL 中的 IP 地址。
- 基于MySQL DB进行验证。
my.cnf
- 启动数据库。
- 验证 mysqld 是否在没有 .
--skip-networking option
- 重新启动数据库并相应地修复您的代码,使其关闭 中的连接。
finally
- 禁用防火墙和/或配置防火墙/代理以允许/转发端口。
另请参阅:
评论
我遇到了同样的错误,因为我试图在不启动mysql服务器的情况下运行我的程序。
启动mysql服务器后,一切正常。
刚刚经历过这个。
必须通过以下方式使其工作: (这可以放在静态块初始化器中)
static{ // would have to be surrounded by try catch
Class.forName("com.mysql.jdbc.Driver"); // this will load the class Driver
}
此外,还可以通过以下方式获取连接:
conn = DriverManager.getConnection(DBURL,<username>,<password>);
而不是指定登录参数
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
问候。
评论
当Java从堆中取出时,我捕捉到了这个异常。如果我尝试在RAM中放入许多数据项 - 首先我会捕获“通信链路故障”,然后是“OutOfMemoryError”。
我记录了它,我减少了内存消耗(删除 1/2 数据),一切正常。
就我而言,我需要将 Localhost 替换为实际的数据库服务器 IP 地址
而不是
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/DBname", "root", "root");
我需要
Connection con = DriverManager.getConnection(
"jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");
评论
我遇到了同样的问题,以下是解决方法:
- 我的.jsp正在调用我尚未在 servlet。
- 我有两个列名,我通过它们传递到一个对象中,它们与数据库中的列名不匹配。
ResultSet (getString("columnName"))
我不确定哪一个解决了问题,但它奏效了。此外,请确保为每个表创建一个新的 和 查询。Statement
ResultSet
评论
请在 /etc/mysql/my.cnf 文件中更新您的 IP 地址
bind-address = 0.0.0.0
重新启动 mysql deamon 和 mysql 服务。
评论
我的相同问题通过以下步骤解决:
转到
my.cnf
vi /etc/mysql/my.cnf
修改其绑定地址
"bind-address = 0.0.0.0"
重启MySQL
sudo /etc/init.d/mysql restart
这可能是一个简单的 jar 问题。可能是您正在使用当前MySQL版本不支持的旧版本。我按我正在使用的方式使用,这个问题为我解决了。mysql-connector-java-XXX-bin.jar
mysql-connector-java-5.1.18-bin.jar
mysql 5.5
评论
如果您使用 or 服务器来安装 mysql 数据库。
然后,您必须显式启动mysql sever其他明智地,它将在与数据库连接时显示WAMP
XAMP
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
如果更改了端口,则会出现此类错误“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路失败” 请检查您的端口号
如果数据库连接长时间处于空闲状态,则会发生此异常。com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
这个空闲连接返回 true,但是如果我们尝试执行语句,那么它将触发此异常,因此我建议使用数据库池。connection.isClosed();
评论
我以一种简单的方式解决了这个问题,这对我有用。我遇到了 seme 问题“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障”。在我的db.properties文件中,我有这个: url:jdbc:mysql://localhost:90/myDB, 只删除了端口 url ,导致这种方式 url:jdbc:mysql://localhost/myDB 对我有用。
我已经遇到同样的问题好几个小时了。我正在使用 MAMP 服务器
不要使用 localhost:[Apache Port],而是使用 MySQL 端口。
下面是 MAMP 服务器的默认 MySQL 端口。
String url = "jdbc:mysql://localhost:8889/db_name";
Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
评论
当我在 my.ini 和 php.ini 文件中将 mysql 端口从 3306 更改为 3307 时,这种情况发生在我身上,但在将端口 (3307->3306) 改回来后,它又可以正常工作了。
就我而言,原来是版本太旧了。mysql-connector-java
在我的演示中,我以某种方式使用:mysql-connector-java
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
但是在开发环境中,我使用这个:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
我的MySQL版本是5.1.48(是的,它很旧,只是为了模仿产品版本)。所以我遇到了同样的错误。
既然找到了原因,就找到了解决方案。匹配版本!
评论
较早的答案是合适的。但是,我还想指出一个更通用的问题。
我遇到了类似的问题,原因是我公司的网络限制。
当我在任何其他网络中时,相同的连接都成功了。
评论
如果有任何读者在访问远程服务器时遇到此问题:请确保端口已打开
尝试更改为 .localhost
127.0.0.1
localhost 将解析为 .默认情况下,MySQL无法通过IPv6连接。::1
这是输出:telnet localhost 3306
$ telnet localhost 3306
Trying ::1...
并且MySQL服务器没有响应。
当然,请确保您的MySQL服务器正在运行。
评论
也许您没有启动 Mysql 和 Apache 服务器。从XAMPP控制面板启动Apache服务器和Mysql后,连接已成功建立。
祝你好运!
为我解决的是做两件事: 1. 使用以下连接创建除 root 以外的新用户,并设置一些密码:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
2. 在mysqld.conf上注释IP地址行
然后使用新的用户名和密码进行连接。它应该起作用。
评论
它试图连接到旧版本的 MySQL(“版本”、“5.1.73” );当您使用较新的驱动程序版本时,您会收到一个错误,告诉您使用“com.mysql.cj.jdbc.Driver,甚至您不必指定使用哪个版本:
加载类 com.mysql.cj.jdbc.Driver'。驱动程序是 通过SPI自动注册,并手动加载驱动程序 类通常是不必要的。
com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
我更改了声明以使用mysql-connector-java的5.1.38版本,并且在代码中保留了com.mysql.jdbc.Driver。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
当我看到 Ankit Jain 的回答时,一切都开始了
我的防火墙阻止了我的MySQL监听的3307帖子。所以我把端口从3307改到了3306,然后我就可以成功连接到数据库了。
在我的 MacBook 中,我仅在重新安装新版本的 eclipse EE 并删除本地服务器(如 xamp、mysql 或 mamp)时解决了此错误,但仅使用其中之一......
当我开始申请时,我遇到了同样的问题,
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
问题是在mysql文件/etc/mysql/mysql.conf.d/mysqld.cnf中,配置是这样的
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
因此,正如我们所看到的,绑定地址指向 127.0.0.1,因此,对于启动您的应用程序,一个简单的解决方案是我们可以使用 jdbc:mysql://127.0.0.1:3306/pizzeria 而不是 jdbc:mysql://localhost:3306/pizzeria,它将 mysql 连接到应用程序,或者另一种解决方案是您可以检查并将 mysql 配置更改为默认值。这两种解决方案都可以工作。 我希望它也对你们有用。
评论
用于远程调用 mysql
将远程用户添加到 Mysql from for exemple IP=remoteIP :
mysql -u xxxx -p //local coonection to mysql mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord'; //Query OK, 0 rows affected (xx sec) mysql> FLUSH PRIVILEGES; //Query OK, 0 rows affected
允许远程访问 Mysql(默认情况下不允许所有外部调用):
Edit /etc/mysql/mysql.conf.d/mysqld.cnf or /etc/mysql/my.cnf Change line: bind-address = 127.0.0.1 to bind-address = 0.0.0.0 Restart Mysql: /etc/init.d/mysql restart
对于最新版本的 JDBC 驱动程序,JDBC :
jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC' jdbc.user='theNewUser'
打开文件 /etc/mysql/my.cnf: 将以下参数从
'绑定地址 = 127.0.0.1
自
bind-address = 0.0.0.0 #this 允许所有系统连接
在mysql中为特定的IP地址>运行以下命令
grant all privileges on dbname.* to dbusername@'192.168.0.3' IDENTIFIED BY 'dbpassword';
如果要授予对所有 IP 地址的访问权限,请运行以下命令:
grant all privileges on dbname.* to dbusername@'%' IDENTIFIED BY 'dbpassword';
就我而言,我必须建立到远程数据库的 ssh 隧道,并且所有设置都是正确的,并且测试与 PhpStorm 的连接也成功。并且还加载了架构,但没有加载数据。相反,我得到了:
[08S01] Communications link failure. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
上述建议均无效。出于任何原因,我试图通过简单地重新启动 PhpStorm 来解决问题,瞧它起作用了!
此外,您的服务器可能刚刚关闭。在 Mac 上,通过聚光灯导航到 mySQL 首选项面板。在那里,选中该框以在计算机启动时启动服务器并启动服务器。
我收到多个错误,例如:
CommunicationsException: Communications link failure
java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at
.
我不得不补充:
在 AndroidManifest.xml 中,紧跟在开始清单标记之后。
<uses-permission android:name="android.permission.INTERNET"/>
将 JDBC 驱动程序添加到 Gradle(或 Maven)依赖项中。
我有同样的连接错误: 我遇到的问题是我使用了 MySQL 8.0.15,但 Java 连接器是 5.x.x。
以下是我如何修复它。 1. 下载 8.0.15.来自 Maven 存储库:https://search.maven.org/search?q=g:mysql%20AND%20a:mysql-connector-java
- 在 Eclipse IDE 中,选择资源管理器中的“引用的库” 鼠标右键>构建路径>配置构建路径 a. 删除“mysql-connector-5.x.jar” b. 单击“添加外部 JAR...”并选择mysql-connector-java-8.0.15.jar。
重新运行它,问题就消失了。
评论
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321
con = DriverManager.getConnection(dbhost, user, password);
如果 MySQL 版本 8 或更高版本用户更新了连接器
评论
如果Java尝试通过SSL连接到MySQL,但出现问题,也可能发生此错误。(就我而言,我正在将 Payara Server 5.193.1 连接池配置为 MySQL。
有人建议设置.但是,从 Connector/J 版本开始,该设置已弃用。以下是 MySQL Connector/J 8.0 配置属性的摘录:useSSL=false
8.0.13
ssl模式
默认情况下,网络连接是 SSL 加密的;此属性允许关闭安全连接,或选择不同的安全级别。允许以下值: - 建立未加密的连接; - (默认)如果服务器启用了加密连接,则建立加密连接,否则回退到未加密的连接; - 如果服务器启用了安全连接,则建立安全连接,否则失败; - 与配置的证书颁发机构 (CA) 证书类似但另外验证服务器 TLS 证书; - 与 类似,但另外验证服务器证书是否与尝试连接的主机匹配。
DISABLED
PREFERRED
REQUIRED
VERIFY_CA
REQUIRED
VERIFY_IDENTITY
VERIFY_CA
此属性替换了已弃用的旧属性 , 和 ,这些属性仍被接受,但转换为 if is not 显式设置的值: 被转换为 ; 被翻译成 ; 被翻译成 ; 被翻译成 。没有等效的旧设置。请注意,对于所有服务器版本,默认设置 是 ,它等同于 、 和 的旧设置 ,在某些情况下,这些设置与 Connector/J 8.0.12 及更早版本的默认设置不同。应检查继续使用旧属性并依赖于其旧默认设置的应用程序。
useSSL
requireSSL
verifyServerCertificate
sslMode
sslMode
useSSL=false
sslMode=DISABLED
{"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}
sslMode=PREFERRED
{"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}
sslMode=REQUIRED
{"useSSL=true" AND "verifyServerCertificate=true"}
sslMode=VERIFY_CA
sslMode=VERIFY_IDENTITY
sslMode
PREFERRED
useSSL=true
requireSSL=false
verifyServerCertificate=false
如果显式设置了旧属性,则忽略旧属性。如果未显式设置 OR ,则应用默认设置 。
sslMode
sslMode
useSSL
sslMode=PREFERRED
默认值:
PREFERRED
自版本: 8.0.13
因此,就我而言,设置是我解决问题所需要的一切。
这是在一台测试机器上。但对于生产环境,安全的解决方案是正确配置Java客户端和MySQL服务器以使用SSL。sslMode=DISABLED
请注意,通过禁用 SSL,您可能还必须设置 .(同样,从安全角度来看,这不是一个明智的决定)。MySQL ConnectionString 选项中提供了更多信息:allowPublicKeyRetrieval=true
AllowPublicKeyRetrieval
如果用户帐户使用身份验证,则密码在传输过程中必须受到保护;TLS 是首选机制,但如果它不可用,则将使用 RSA 公钥加密。若要指定服务器的 RSA 公钥,请使用连接字符串设置,或设置为允许客户端自动从服务器请求公钥。请注意,可能允许恶意代理执行 MITM 攻击以获取明文密码,因此默认情况下为 False,必须显式启用。
sha256_password
ServerRSAPublicKeyFile
AllowPublicKeyRetrieval=True
AllowPublicKeyRetrieval=True
评论
样例 jdbc 连接类文件。当您想要获取连接时,只需调用 getConnection 方法即可。包含相关的 mysql-connector.jar
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
public Connection getConnection() {
Connection con = null;
String dbhost;
String user;
String password;
// get properties
dbhost="jdbc:mysql://localhost:3306/cardmaildb";
user="root";
password="123";
System.out.println("S=======db Connecting======");
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(dbhost, user, password);
//if you are facing with SSl issue please try this
//con = DriverManager.getConnection("jdbc:mysql://192.168.23.100:3306/cardmaildb?useUnicode=yes&characterEncoding=UTF-8&useSSL=false",user, password);
} catch (Exception e) {
System.err.println("error in connection");
e.printStackTrace();
}
System.out.println("E=======db Connecting======");
return con;
}
public static void main(String[] args) {
new DBConnection().getConnection();
}
}
就我而言,当我尝试从同一主机连接到在 Ubuntu 主机 VM 上的容器内运行的 mysql-server 时,我遇到了此错误。
例:
如果我的 VM 名称是 ,则以下 jdbc URL 将不起作用:abc.company.com
jdbc:mysql://abc.company.com:3306/dbname
上面的 jdbc url 可以在其他机器上正常工作,例如但不能。xyz.company.com
abc.company.com
其中,以下 jdbc URL 在机器上可以正常工作:abc.company.com
jdbc:mysql://localhost:3306/dbname
这导致我检查了文件。/etc/hosts
添加以下行以解决此问题:/etc/hosts
127.0.1.1 abc.company.com abc
这似乎是一个操作系统错误,需要我们在某些 Ubuntu 版本上添加这些错误。 参考: https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_hostname_resolution
在尝试此操作之前,我已经尝试了所有其他解决方案,例如更改mysql.cnf中的行。在这种情况下,他们都没有帮助我。GRANT ALL..
bind-address
就我而言,结果是mysql-connector-java的版本不同。 我刚刚将mysql jdbc更改为maria jbdc
旧的 jdbc 驱动程序
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
新的 JDBC 驱动程序
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.2</version>
</dependency>
评论
这个问题有很多答案,我认为我的答案更适合另一个问题,但这个问题的答案是锁定的。它指向此线程。
为我解决的是将字符串附加到 .&createDatabaseIfNotExist=true
spring.datasource.url
application.properties
这是非常棘手的,因为它表现为几个不同的、奇怪的、看似无关的错误,当我试图修复它抱怨的内容时,它只会弹出另一个错误,或者错误是无法修复的。它抱怨无法加载 JDBC,说它不在类路径中,但我以大约 30 种不同的方式将其添加到类路径中,并且已经在进行面对面处理。
我通过降级jdk版本解决了这个问题。 从 11.0.11 降级到 11.0.10 或更早的 java 版本
我在远程 Jenkins 服务器上运行自动化测试时遇到了这个问题。但是,在本地运行测试时,没有发生任何问题。
对我来说,在将 mysql-connector 版本更新到 POM 文件中的最新版本后,这个问题得到了解决,因为 MySQL 版本在服务器端发生了变化。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
但是调试结果有点困难,花了将近两天的时间,因为我不知道MySQL版本更改,而且它在本地工作正常。
评论
就我而言,解决方案是将预期的 TLS 协议添加到连接字符串中,如下所示:
jdbc:mysql://localhost:3306/database_name?enabledTLSProtocols=TLSv1.2
出于测试/开发目的(不建议用于生产),您还可以尝试:
jdbc:mysql://localhost:3306/database_name?useSSL=false&allowPublicKeyRetrieval=true
评论
此问题是从 xampp 端口创建。首先,您应该确认您的端口号。基本上,每个人都尝试使用 3306,但有时会出错。 你可以试试这个jdbc:mysql://127.0.0.1:3307
请使用与平台无关的zip或tar,遇到此错误时对我有用。
https://dev.mysql.com/downloads/connector/j/?os=26
评论
添加这个 useSSL=false&allowPublicKeyRetrieval=true
jdbc:mysql://localhost:3306/cloudapp?useSSL=false&allowPublicKeyRetrieval=true
通常,当您使用的数据库在操作系统中关闭时,会出现此问题。 如果您使用 Windows,请转到服务并确保 MySQL 处于 Starting 位置。
在MySQL Workbench中,可能会发生此问题,尤其是在localhost下使用Eclipse JPA和持久性时。问题在于,正如其他一些答案中提到的,MySQL服务器在创建连接时可能非常限制使用localhost,0.0.0.0.1或127.0.0.1。为了克服这个问题,(对于 Windows)中的 hosts 文件:
C:\Windows\System32\驱动程序\等
需要为主连接(例如myserver)添加以下条目:
#MY 数据库服务器
127.0.0.1 myserver
如果未将其添加到主机,则每次尝试从 127.0.0.1 连接数据库时,连接都将失败
就我而言,我在从intellij IDEA运行时遇到此错误,而从终端运行工作正常。然后我发现 Intellij 指向的是我下载的一些。我把它改成OpenJdk,它开始工作正常。./gradlew bootRun
liberica java
就我而言,
在连接字符串中添加查询参数解决了该问题。&useSSL=false
jdbc:mysql://${jdbc_url}:${jdbc_port}/${database_name}?serverTimezone=UTC&autoReconnect=true&useSSL=false&failOverReadOnly=false&maxReconnects=10
这也可能是MySQL消亡的原因。就我而言,我有一个查询触发了MySQL中的错误,因此每当执行查询时,服务器都会死亡并重新启动。查看MySQL错误日志,看看是否发生了这种情况。
就我而言(MacOS 上的 Homebrew),那是在/usr/local/var/mysql/<machinename>.err
由于我在测试系统上看到了这一点,我最终删除并重新创建了我的数据库,这解决了这个问题,但我不敢想象如果它在生产中我会做什么。
我只想添加另一个答案,因为它并不总是您的后端配置或连接池等中的问题。
有时它也是数据库的基础设施,它所在的服务器的位置,因此请确保您拥有良好的数据库基础设施(CPU、RAM、网络等),并且它位于应用程序的同一区域,这样您将提高很多性能并停止收到此错误消息,在某些情况下,正如我试图解释的那样, 是关于您的数据库的更多信息
评论