使用 Java 远程访问 MySQL 数据库时出错

Error accessing MySQL database remotely with Java

亲爱的 Whosebug 社区,您好。

所以,我是 Java 和 MySQL 开发的新手,长话短说,我正在尝试使用 MySQL 数据库(和MySQL Workbench (v5.6) 提供的工具,我作为服务器的 PC 和我创建的 Java 程序。所有这一切都没有提供域名,而是我的服务器 IP。我已经做了研究,但现在我已经到了哭求救命的地步。

问题:当我的 connect 变量从 localhost:3306 获得连接时,似乎一切正常,但我只想从互联网访问它,我尝试了各种方法,只是根本没有成功。

Failure 1 - I tried to manipulate the my.ini file on C:\ProgramData\MySQL Workbench 5.6\ setting the bind-address to 127.0.0.1, then to my IPv4 I got from ipconfig (CMD) and then to 'mypublicip' from http://www.whatismypublicip.com/ .

但没用。

Failure 2 - I tried to edit the connection from MySQL Workbench -> Hostname= 'mypublicip', port=3306, Username and Password as it was when I was testing it with Hostname=localhost.

这对 MySQL Workbench 不起作用。我无法从 Workbench 连接到我的服务器,当我尝试设置 Remote Management 对话框时,我不知道什么有效,什么无效。

Failure 3 - I tried keeping as Hostname=localhost at Workbench and I changed the getConnection() method to return connection from the 'mypublicip' ip. I couldn't work with my IPv6 (I don't know how to use it in getConnection()), so I used a public id I found from http://www.whatismypublicip.com/ . When I did that an Error Occured saying this: "Cannot connect to database server. 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." . That's why I tried the failure no.1

这是我的 Java 应用程序中的代码,它在程序和数据库之间创建连接。 connectMessage 是一个 JFrame,它向用户提供有关连接成功或失败的适当消息、错误代码和错误消息:

package aPackage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
*
* @author manosmer
*/
public class MySQLConnector {
    private Connection connect;

    public MySQLConnector(){
        connect = null;
    }

    public Connection connecting(UsersInfo user) throws ClassNotFoundException{
        try{
            Class.forName("com.mysql.jdbc.Driver");           
            connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/connectmessages", user.getName(), user.getPassword());

            connectMessage messageconn = new connectMessage();
            messageconn.setConnection(connect, user);

        }catch(SQLException ex){
            UserLogin errorlogin = new UserLogin();
            connectMessage messageconn = new connectMessage();
            messageconn.failed(ex);
        }
        return connect;
    }  
}

如果您的 sql 服务器在路由器后面,请尝试将流量从某个路由器端口重新路由到您的服务器 MySql 端口。

我找到问题了!真正的问题是我没有在我的路由器防火墙上打开一个端口让程序通过互联网访问!转到您的 Internet 向导,创建一个端口(与您的 MySQL 服务器使用的相同)并将其应用于您的服务器计算机。然后你必须找到你的 IP 并在你的代码中使用它。就这样!编码愉快。

到目前为止你所做的一切都与你应该做的完全相反。使 MySQL 服务器绑定到 127.0.0.1 或 'localhost' 将 阻止 来自本地主机外部的任何连接。

您需要做的是将其绑定到 0.0.0.0 并在您的防火墙中打开端口 3306。