Mysql与本地主机连接正常但无法与IP地址连接

Posted

技术标签:

【中文标题】Mysql与本地主机连接正常但无法与IP地址连接【英文标题】:Mysql connecting ok with local host but not connecting with ip address 【发布时间】:2019-04-25 18:26:42 【问题描述】:

我有一个 java 程序,它从 mysql 获取它的信息,当我使用 localhost 连接到它时它工作正常,但每当我将 ipaddress 放入它时它就不起作用。 我的连接代码和异常如下。

package connection;

import java.net.InetAddress;
import java.sql.Connection;
import java.sql.DriverManager;

/**
 *
 * @author rpsal
 */
public class DBConnection 

    public static Connection connect()//working  on local host
    
        Connection conn = null;
        try 
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://"+getIpAddress()+"/ChatMaster";
            conn = DriverManager.getConnection(url, "root", "");
         catch (Exception e) 
            System.out.println("Exception in connect" + e);
        
        return conn;
    

    public static String getIpAddress() throws Exception 
        InetAddress inetAddress = InetAddress.getLocalHost();
        return inetAddress.getHostAddress();
    

当我使用String url = "jdbc:mysql:///ChatMaster"; 时,它工作正常。 我得到的异常如下。

Exception in connectjava.sql.SQLException: null,  message from server: "Host 'Rp-Salh' is not allowed to connect to this MySQL server"

【问题讨论】:

我认为 SQL Server 已配置,所有来自外部(本地主机除外)的请求都会被阻止。 我需要它在我网络上的任何系统上工作,这是主要问题。 您需要更改数据库配置。 【参考方案1】:

正如错误告诉您的那样,该 ip Adress 没有访问该数据库的权限,我认为这不是您的代码错误。

我不知道 MySQL 是不是一样,但是对于 postgresql 我 需要在数据库中定义以允许远程连接。

【讨论】:

感谢男士为我指出正确的方向 +1。【参考方案2】:

我认为inetAddress.getHostAdress() 将返回主机名(如 Rp-Salh) 所以我推荐你使用这种方法

inetAddress.getLocalHost()

【讨论】:

但是我需要为我网络上的每个人使用我的数据库。并且数据库仅在一个系统上。我认为本地主机可能不起作用【参考方案3】:

我可以从错误日志中看到。 InetAddress.getLocalHost(); 没有返回正确的 IP 地址。

请尝试通过提供硬编码的 IP 地址连接它(仅用于测试以确定)。

您可以在windows中通过CMD输入ipconfig获取系统IP地址。

【讨论】:

我检查了你所说的,获取正确的 IP 地址没有任何问题。我首先通过手动输入 ipaddress 进行双重检查,然后检查我的函数返回的内容。【参考方案4】:

你需要确保两件事。

    检查 MySQl 端口 3306 是否已经打开。这是示例远程连接字符串

    String url = "jdbc:mysql://192.168.1.121:3306/ChatMaster";

    检查数据库用户名和密码是否正确。

【讨论】:

端口 3306 已打开,用户名也正确,因为它适用于 localhost,我还没有输入任何密码。【参考方案5】:

更新 mysql 配置文件(可能在服务器文件目录 etc/mysql/my.conf 中)检查它是否配置了 127.0.0.1(默认)作为主机地址并将其更改为您的 IP。

【讨论】:

【参考方案6】:

事实证明@Jan。 St 为我指出了正确的方向,因为问题不在于我的代码或任何获取 ipaddress 的问题,只是默认情况下远程 root 访问在 mysql 中被禁用。我只是按照以下链接中的答案进行了操作。

How to allow remote connection to mysql

注意:如果第一个答案本身不起作用,请确保您也关注同一篇文章中的第二个答案。

【讨论】:

以上是关于Mysql与本地主机连接正常但无法与IP地址连接的主要内容,如果未能解决你的问题,请参考以下文章

MySql数据库 本地网络内的电脑能连接,外网IP不能连接

virtualbox之紧虚拟主机与本地主机连接

电脑出现ip地址错误网络连不上网怎么办

本地连接受到限制或者无法连接,改过IP地址后,还是上不去网

VMware里的Linux无法Ping通宿主机怎么办?

用PUTTY让IP与电脑连接,但出现Network error:Connection refused。OPENSSH安装正常·····