[英]Cannot connect to mysql server from java
我在这行代码中收到错误"Communications link failure"
:
mySqlCon = DriverManager.getConnection("jdbc:mysql://**server ip address**:3306/db-name", "mu-user-name", "my-password");
我查了这篇文章中的所有内容:
当我将查询字符串更改为:
mySqlCon = DriverManager.getConnection("jdbc:mysql://**server ip address**:22/127.0.0.1:3306/db-name", "mu-user-name", "my-password");
我收到错误Packet for query is too large (4739923 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
Packet for query is too large (4739923 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
虽然我已经改变了my.cnf上的数据包大小,然后重新启动了mysql服务。
有什么建议?
注意:
我可以通过ssh与这段代码连接,但这种方式似乎不合理! 我可以在main中连接一次然后我应该将连接传递给所有类。
public my-class-constructor() {
try {
go();
} catch (Exception e) {
e.printStackTrace();
}
mySqlCon = null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://" + rhost + ":" + lport + "/";
String db = "my-db-name";
String dbUser = "dbuser";
String dbPasswd = "pass";
try {
Class.forName(driver);
mySqlCon = DriverManager.getConnection(url + db, dbUser, dbPasswd);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void go() {
String user = "ssh-user";
String password = "ssh-pass";
String host = "ips-address";
int port = 22;
try {
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
lport = 4321;
rhost = "localhost";
rport = 3306;
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
int assinged_port = session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:" + assinged_port + " -> " + rhost
+ ":" + rport);
} catch (Exception e) {
System.err.print(e);
e.printStackTrace();
}
}
看看这里 。 看下面描述了您的情况
可以传输到MySQL 5.7服务器或客户端的最大可能数据包是1GB。
当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的数据包时,它会发出ER_NET_PACKET_TOO_LARGE错误并关闭连接。 对于某些客户端,如果通信包太大,您在查询错误期间也可能会失去与MySQL服务器的连接。
客户端和服务器都有自己的max_allowed_packet变量,因此如果要处理大数据包,则必须在客户端和服务器中增加此变量。
因此,您似乎还需要更改客户端上的max_allowed_packet
:
mySqlCon = DriverManager.getConnection("jdbc:mysql://**server ip address**:3306/db-name?max_allowed_packet= 5073741824", "mu-user-name", "my-password");
我将/ etc / mysql中my.cnf文件中的绑定地址更改为服务器的ip地址,解决了问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.