2011-02-16 177 views
0

我正面臨一個令人困惑的問題。我已經完成了一個jsf web應用程序,該應用程序使用Tomcat7和tomcat-jdbc-pool作爲連接池提供程序來使用hibernate和infinispan。Tomcat7 MySQL連接錯誤

它被部署到具有2個節點的Linode集羣 - 一個數據庫服務器和一個生產服務器。

我可以使用完全相同的Tomcat7副本(我從字面上tarred tomcat目錄並將其提升到服務器以調試此錯誤),即使在連接到實時數據庫實例時,也可以在本地環境中運行應用程序。一切運行良好。

當我嘗試從生產服務器我得到了MysqlIO錯誤的應用程序:

Caused by: java.net.ConnectException: Connection refused

進一步尋找在日誌中我看到:

The last packet sent successfully to the server was 1 milliseconds ago. The driver has not received any packets from the server. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

我可以在命令連接在prodapp服務器上的線很好 - 即使使用tcp:

mysql -h db01 -u user -p --protocol=tcp 

但它只是不會運行運行insi de Tomcat容器。我嘗試了各種各樣的東西,但我真的很難過。我似乎很奇怪,我可以在本地使用同一個Tomcat7副本連接到數據庫服務器,但是當部署到生產環境時,同一個tomcat7副本無法連接 - 即使我可以從該生產服務器上的命令行進行連接。我很難過。

任何幫助,非常感謝。

編輯:解決了我的問題後浪費了太多好生活。答案是我很愚蠢。感謝所有嘗試提供幫助的人。我有應用程序模式W /一個開發和生活模式,連接池一直在讀取開發模式。真正讓人困惑的是sessionfactory被模擬生存,所以它實際上會到達活動數據庫並在啓動時初始化一個連接,所以我可以看到它連接(並在mysql日誌中運行元數據查詢),但是當它實際上去從infinispan獲取連接它爆炸了。噢 - 至少現在它在工作。再次感謝。

+0

你檢查了防火牆嗎? – BalusC 2011-02-16 19:36:56

+0

我沒有(現在我會馬上),但是如果它是防火牆問題,我不會在命令行上被阻止連接嗎? – 2011-02-16 19:53:41

回答

0

如果您從另一個盒子連接到MySQL數據庫服務器,那麼您需要明確授予該用戶帳戶的權限以從該IP進行連接。

你可以做到這一點,而在命令行:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'ip_address' 

編輯:授予針對一般不要求所有表的所有權限,具體你要授予(http://dev.mysql.com/doc/refman/5.1/en/grant.html

什麼權限

要查看權限您目前有:

USE mysql; 
SELECT * FROM users; 

我道歉,如果我光顧你,只是,這是最常見的親我碰到的瑕疵。