【问题标题】:Cannot connect to the database on the remote server无法连接到远程服务器上的数据库
【发布时间】:2013-05-28 21:42:07
【问题描述】:

我有一个使用 Java 的应用程序试图连接到存储在服务器 RemoteServer.com 上的 MySQL 数据库 myDatabase(只是一个示例)。我正在尝试通过指定连接字符串、密码和用户来连接它。在我的情况下,连接字符串如下所示:

jdbc:mysql://RemoteServer.com/myDatabase

但是,我无法连接到数据库(用户和密码指定正确)。当我在本地使用数据库时,我可以毫无问题地连接 (jdbc:mysql://localhost:3306/myDatabase)。我想我在指定连接字符串时有问题,对吗?谢谢。

【问题讨论】:

    标签: mysql database database-connection connection-string


    【解决方案1】:

    这可能是各种各样的事情。远程服务器是 Linux 还是 windows 主机?数据库是否正在运行并侦听删除服务器上的端口 3306? telnet 到远程服务器上的端口 3306 说什么?很多时候,它的防火墙会阻止对该端口的访问。检查防火墙(硬件和软件)。

    您是否也故意错过了连接字符串中的 db 端口?

    【讨论】:

    • 我对这些东西还很陌生,所以我没有故意错过任何东西。我是如何找到数据库端口的?
    • 连接数据库并运行 :: SHOW GLOBAL VARIABLES LIKE 'PORT'; - 这会让你知道数据库服务器在哪个端口上运行。
    • 您是否尝试过这样做:jdbc:mysql://RemoteServer.com:3306/myDatabase
    • 检查您连接的用户是否有适当的权限从外部数据库服务器访问。
    • 这是了解它的一种方法,在数据库服务器上运行此查询 :: SHOW GLOBAL VARIABLES LIKE 'version_compile_os';
    【解决方案2】:

    您没有提到操作系统,但这适用于您可能需要调整命令的任何操作系统。要将 MySQL 暴露给 localhost 以外的任何内容,您必须在 my.cnf 中取消注释以下行并将其分配给您的计算机 IP 地址而不是环回

    #Replace xxx with your IP Address 
        bind-address        = xxx.xxx.xxx.xxx
        Or add a bind-address = 0.0.0.0 if you don't want to specify the IP
    

    然后使用新的 my.cnf 条目停止并重新启动 MySQL。如果您使用的是 Linux,请转到终端并输入以下命令。

    lsof -i -P | grep :3306
    

    你的 xxx 中的实际 IP 应该会返回类似这样的内容

    mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)
    

    如果上述语句正确返回,您将能够接受远程用户。但是,要让远程用户以正确的权限连接,您需要在 localhost 和 '%' 中创建该用户。

    CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
    CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
    

    然后

    GRANT ALL ON *.* TO 'myuser'@'localhost';
    GRANT ALL ON *.* TO 'myuser'@'%';
    

    如果您没有像上面那样创建相同的用户,当您在本地登录时,您可能会继承基本 localhost 权限并遇到访问问题。如果您想限制 myuser 的访问权限,那么您需要在此处阅读 GRANT 语句语法 如果您完成了所有这些并且仍然有问题发布一些额外的错误输出和 my.cnf 相应的行。

    如果在此之后仍然存在连接问题,则可能与防火墙或 IPTABLES 相关。正确定义访问权限和用户后,请返回并发布发生的情况。

    【讨论】:

      最近更新 更多