1

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

jdbc:mysql://RemoteServer.com/myDatabase

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

4

2 回答 2

2

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

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

于 2013-05-28T21:45:55.077 回答
0

您没有提到操作系统,但这适用于您可能需要调整命令的任何操作系统。要将 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 语句语法。

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

于 2013-05-28T22:07:04.213 回答