tôi nhận được lỗi "Communications link failure"
tại dòng mã này:Không thể kết nối đến máy chủ mysql từ java
mySqlCon = DriverManager.getConnection("jdbc:mysql://**server ip address**:3306/db-name", "mu-user-name", "my-password");
Tôi đã kiểm tra tất cả mọi thứ trong this post:
- tôi tăng max-phép-gói trong tôi. cnf trong etc/mysql: max_allowed_packet = 5073741824 ------ [mysqldump] max_allowed_packet = 1G
- Địa chỉ liên kết là: 127.0.0.1
- Tất cả giá trị hết giờ đều bình đẳng đối với một số
- Tomcat chưa được cài đặt trên máy chủ (server mới)
- Không có bỏ qua-mạng trong my.cnf
- Tôi có thể ping máy chủ
- Tôi đang kết nối với cơ sở dữ liệu mysql qua ssh
Khi tôi thay đổi chuỗi truy vấn để này:
mySqlCon = DriverManager.getConnection("jdbc:mysql://**server ip address**:22/127.0.0.1:3306/db-name", "mu-user-name", "my-password");
tôi nhận được lỗi Packet for query is too large (4739923 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
Trong khi tôi đã thay đổi kích thước gói trên my.cnf và khởi động lại dịch vụ mysql sau đó.
Mọi đề xuất?
LƯU Ý:
Tôi có thể kết nối thông qua ssh với mã này, nhưng cách này có vẻ không hợp lý! Tôi có thể kết nối một lần trong chính và sau đó tôi nên vượt qua kết nối đến tất cả các lớp học.
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();
}
}
Bạn có thể ping máy chủ không? –
có vẻ như truy vấn của bạn quá lớn, hãy thử truy vấn nhỏ hơn, ví dụ: "chọn * từ bảng giới hạn 10;" – nafas
Nếu cơ sở dữ liệu MySQL là từ xa, bạn đã cấu hình các điều khoản chính xác chưa? – John