我有一个使用Java的应用程序试图连接到存储在服务器RemoteServer.com上的MySQL数据库myDatabase (只是一个例子)。我正在尝试通过指定连接字符串、密码和用户来连接它。在我的例子中,连接字符串如下所示:
jdbc:mysql://RemoteServer.com/myDatabase但是,我无法连接到数据库(正确指定了用户名和密码)。当我在本地使用数据库时,我可以毫无问题地进行连接(jdbc:mysql://localhost:3306/myDatabase)。我想我在指定连接字符串时遇到了问题,对吗?谢谢。
发布于 2013-05-29 05:45:55
它可能是各种各样的东西。远程服务器是Linux主机还是windows主机?数据库是否正在运行并侦听remove服务器上的端口3306?telnet到远程服务器上的端口3306会显示什么内容?很多时候它的防火墙会阻止对该端口的访问。检查防火墙(硬件和软件)。
另外,你是否故意在你的连接字符串中遗漏了db端口?
发布于 2013-05-29 06:07:04
你没有提到操作系统,但这一点适用于任何操作系统,无论你可能只需要调整你的命令。要将MySQL暴露给本地主机以外的任何设备,您必须在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)如果上面的语句返回正确,那么您将能够接受远程用户。但是,为了让远程用户使用正确的权限进行连接,您需要在本地主机和'%‘中创建该用户,如下所示。
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相关。在正确定义了访问权限和用户后,只需返回并发布所发生的事情。
https://stackoverflow.com/questions/16801972
复制相似问题