我正面临一个令人困惑的问题。我已经完成了一个jsf web应用程序,它使用Tomcat7和tomcat-jdbc-pool作为连接池提供程序,可以使用hibernate和infinispan。
它被部署到具有2个节点的Linode集群 - 一个数据库服务器和一个生产服务器。
我可以使用完全相同的Tomcat7副本在我的本地环境中运行应用程序(我实际上将tomcat目录转换为服务器并将其提升为调试此错误) - 即使连接到实时数据库实例也是如此。一切都运行良好。
当我尝试从生产服务器运行应用程序时,我收到MySQLIO错误:
引起:java.net.ConnectException: 连接被拒绝
在日志中进一步查看:
成功发送的最后一个数据包 服务器是1毫秒前。该 驱动程序没有收到任何数据包 从服务器。 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信链路故障
我可以从prodapp服务器上的命令行连接就好 - 甚至使用tcp:
mysql -h db01 -u user -p --protocol=tcp
但它只是无法在Tomcat容器内运行。我尝试了各种各样的东西,但我真的很难过。我可以在本地使用相同的Tomcat7副本连接到数据库服务器,但是当部署到生产时,tomcat7的相同副本无法连接 - 即使我可以从该生产服务器上的命令行连接,这似乎很奇怪。我很难过。
非常感谢任何帮助。
编辑:在浪费了太多美好生活后解决了我的问题。答案是我很蠢。感谢所有试图提供帮助的人。我有应用程序模式w / dev和实时模式,连接池一直在读取开发模式。真正令人困惑的是sessionfactory被模式化了,所以它实际上会到达实时数据库并在启动时初始化连接,所以我可以看到它连接(并在mysql日志中运行元数据查询),但是当它实际上是从infinispan抓住了一个连接它爆炸了。哦 - 好吧 - 至少它现在正在工作。再次感谢。
答案 0 :(得分: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;
如果我光顾你,我很抱歉,这是我遇到的最常见的问题。