2011-02-16 144 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; 

我道歉,如果我光顾你,只是,这是最常见的亲我碰到的瑕疵。