MYSQL为啥用IP地址无法连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL为啥用IP地址无法连接相关的知识,希望对你有一定的参考价值。

应该是没有添加允许 非 locathost 连接过来的用户
当你用 127.0.0.1 去连接你的mysql的时候,连接来源是 127.0.0.1,也就是 localhost
但是如果你用 本机ip 去连接mysql,那么连接来源就是你本机的ip,而不是localhost~~即使你在本机发起的连接请求~
参考技术A al, formed naturally a great part of the co

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

【中文标题】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地址无法连接

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

为啥服务器无法访问

虚拟机网络已连接 ,但无法访问网页(上网)为啥???

阿里云上部署的Mysql服务,本地用客户端可以连接登录,但是java中连接mysql无法连接成功?

为啥客户端无法获取虚拟机DHCP服务器分配的IP地址