我有一个Java应用程序尝试连接存储在服务器myDatabase
上的MySQL数据库RemoteServer.com
(仅作为示例)。我试图通过指定连接字符串,密码和用户连接到它。我的案例中的连接字符串如下所示:
jdbc:mysql://RemoteServer.com/myDatabase
但是,我无法连接到数据库(正确指定了用户和密码)。当我在本地使用数据库时,我可以毫无问题地连接(jdbc:mysql://localhost:3306/myDatabase
)。我想我在指定连接字符串时遇到问题,是不是?谢谢。
答案 0 :(得分:2)
可能是各种各样的事情。远程服务器是Linux还是Windows主机?数据库是否在删除服务器上运行并侦听端口3306? telnet到远程服务器上的端口3306说什么?很多时候它的防火墙阻止访问该端口。检查防火墙(硬件和软件)。
您是否故意错过连接字符串中的db端口?
答案 1 :(得分: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)
如果上述语句正确返回,则您将能够接受远程用户。但是,对于远程用户连接正确的priveleges,您需要在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相关。在您正确定义访问权限和用户后,回过头来发布已发生的事情。