2015-07-21 49 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的服務器。

但是,我仍然不明白爲什麼我能成功連接之前當我沒有做這些事情。