【问题标题】:Tomcat7 MySQL Connection ErrorTomcat7 MySQL 连接错误
【发布时间】:2011-02-16 19:30:04
【问题描述】:

我正面临一个令人困惑的问题。我已经完成了一个 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 的相同副本无法连接——即使我可以从该生产服务器上的命令行连接.. . 我被难住了。

非常感谢任何帮助。

编辑:在浪费了太多美好的生活之后解决了我的问题。答案是我很愚蠢。感谢所有试图提供帮助的人。我使用开发和实时模式对应用程序进行了建模,并且连接池一直在读取开发模式。真正令人困惑的是 sessionfactory 被模拟为 live 所以它实际上会到达 live 数据库并在它启动时初始化一个连接,所以我可以看到它正在连接(并在 mysql 日志中运行元数据查询),但是当它实际上去从infinispan抢连接它爆炸了。哦,好吧——至少它现在可以工作了。再次感谢。

【问题讨论】:

  • 我没有(我现在会),但如果是防火墙问题,我不会在命令行上被阻止连接吗?
  • 似乎不是防火墙问题。在两台服务器上都没有运行防火墙的情况下,我得到了相同的行为。我可以从 prodapp 服务器上的命令行连接,但无法从 tomcat 应用程序连接。

标签: mysql tomcat connection


【解决方案1】:

如果您从其他机器连接到 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;

如果我光顾你,我很抱歉,这是我遇到的最常见的问题。

【讨论】:

  • 是的。我确实确保我可以从服务器连接。 mysql-client 在连接到 db 服务器的 prodapp 服务器上工作正常。只有在 Tomcat 容器中才能看到这一点。
  • 我昨晚确实找到了那个帖子,并尝试了投票最多的回复中的所有项目。我没有尝试的一件事是 TOMCAT6_SECURITY=yes 到 TOMCAT6_SECURITY=no。我不完全确定如何在 tomcat7 中执行此操作,而且我不知道我会失去什么。不过我可以追求这个。这是您考虑的解​​决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
  • 2017-01-08
  • 2014-07-07
相关资源
最近更新 更多