2015-07-21 56 views
0

我在远程服务器上安装了一个mysql数据库(v5.5.41)安装程序,应用程序从另一台服务器连接到数据库以运行一些查询。它一直工作正常,但最近我的数据库服务器有一个新的IP地址。我的应用程序无法连接到数据库,连接超时。拒绝远程MySQL连接请求的访问

应用程序正在使用服务器的DNS名称,而不是硬编码的IP,因此应该没有问题。在任何情况下,如果我跑这从应用服务器:

mysql -u app_user -h mydb.myhost.com -p 

然后我得到

ERROR 1045 (28000): Access denied for user 'app_user'@'xxx.xxx.xxx.xxx' (using password: YES) 

如果它无法找到新的IP,那么该命令可能会只是挂和超时,所以它似乎是一个身份验证问题。 我的密码绝对正确,,但应用程序使用的密码与应用程序连接成功时使用的密码相同,因此这不是一个错误的问题。

我试图从数据库中并重新创建删除用户app_user,正如我在开始做的:

CREATE USER 'app_user'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'mypassword'; 
GRANT SELECT ON mydb.* TO 'app_user'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'mypassword' REQUIRE SSL; 
FLUSH PRIVILEGES; 

我不知道,如果DB服务器IP变化只是巧合,也许还有其他一些问题。

app_user的条目在select user, host from mysql.user中显示与上面的Access Denied消息相同的IP地址。对于它的价值,我试着将DB用户主机更改为*,并得到Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server

这可能与该用户的连接尝试所需的SSL有关吗?

+0

可能您的IP地址已更改(xxx.xxx.xxx.xxx部分)。您可以更改权限以允许名为app_user @ *的用户查看是否允许您连接。 – Giles

+1

尝试这里一行这里http://stackoverflow.com/a/31375124/1816093当然,改变数据库名称和用户名,但不是'%' – Drew

+0

你真的希望他打开所有的门,让任何人无聊玩他的SQL -服务器?不是一个好主意德鲁。更好的想法是使用Giles方法 - 如果他没有静态IP,他应该为他的应用程序尝试一个代理 - 也许他可以使用他自己的服务器作为代理。 – SophieXLove64

回答

0

该问题与我的用户的权限中的REQUIRE SSL有关。没有它,我可以连接就好。我得到的东西通过把我的客户cert.pem和客户key.pem文件的应用程序服务器,更新my.cnf再次工作加入:

ssl-cert = /path/to/client-cert.pem 
ssl-key = /path/to/client-key.pem 

...下[client]部分并重新启动mysql的服务器。

但是,我仍然不明白为什么我能成功连接之前当我没有做这些事情。