我错过了服务器的付款,我的帐户被暂停了一天左右。当他们恢复服务器时,我的所有数据都完好无损,但出于某种原因,Tomcat 无法与我的 MySql 服务器建立 JDBC 连接。它们都在同一台机器上运行,因此我的绑定地址为 127.0.0.1。
这很奇怪,因为我之前曾自行重置过机器,没有任何问题,但显然在停机期间重置了一些东西。
我跟着本指南(仅与 S3 无关的部分,我不在亚马逊基础设施上)最初一切都按预期进行。
我刚成为一名系统管理员,不知道该尝试什么,你会如何诊断这个问题?我得到的堆栈跟踪如下;
INFO: Deploying web application archive myapp-1.1.war
2010-05-26 22:07:22,221 [main] ERROR context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageSource': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'hibernateProperties' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties': Cannot resolve reference to bean 'dialectDetector' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.codehaus.groovy.grails.commons.spring.ReloadAwareAutowireCapableBeanFactory.doCreateBean(ReloadAwareAutowireCapableBeanFactory.java:129)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.initMessageSource(AbstractApplicationContext.java:714)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:404)
at org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext.refresh(GrailsWebApplicationContext.java:153)
...
我因为一些‘bean’而收到此错误。
如果我在命令提示符下输入 mysql,那么我可以轻松地使用与使用 GORM 和 Hibernate 将对象持久保存到数据库的 grails 应用程序相同的凭据登录。
我可能没有提供足够的信息,但我真的很感兴趣学习,如果有人问起,我一定会提供,只是我真的不知道从哪里开始。
更新:我可以通过命令行运行二进制文件来连接到 mysql。我还通过 tcp 运行了 mysql,但无法连接,这能说明问题吗?
root@88:~# mysql -u grails --protocol=tcp -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (110)
正如之前所讨论的,我的绑定地址为 127.0.0.1,因此这不起作用可能并不奇怪。我需要检查 hosts 文件中的哪些内容?
谢谢,
加夫
答案1
mysql
使用命令行实用程序和使用 MySQL JDBC 驱动程序之间的主要区别在于,该mysql
命令默认将使用 Unix 套接字文件(例如/tmp/mysql.sock
),而 JDBC 驱动程序始终使用 TCP/IP。
尝试mysql
通过传递选项强制命令也使用 TCP/IP,--protocol=tcp
看看会发生什么。这可能会给你一个更具启发性的错误消息(或者,如果成功,也会告诉我们一些事情)。
答案2
首先,确保 MySQL 服务器已启动并正在运行:
sudo /etc/init.d/mysqld status
如果没有,请启动它:
sudo /etc/init.d/mysqld start