Я пропустил оплату за свой сервер, и мой аккаунт был заблокирован на день или около того. Когда они восстановили сервер, все мои данные были в рабочем состоянии, но по какой-то причине Tomcat не может установить соединение JDBC с моим сервером MySql. Оба они работают на одном компьютере, поэтому у меня есть адрес привязки 127.0.0.1.
Это странно, потому что я без проблем перезагружал машину по собственному желанию, но явно что-то было сброшено во время простоя.
Я последовал за это руководство (Только биты, которые не относятся к S3, я не использую инфраструктуру Amazon) изначально, и все работало так, как ожидалось.
Я новичок в том, чтобы стать системным администратором, и я не уверен, что попробовать, как бы вы подойти к диагностике этой проблемы? Я получаю следующую трассировку стека:
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)
...
Я получаю эту ошибку для ряда «бобов».
Если я наберу mysql в командной строке, я могу легко войти в систему с теми же учетными данными, что и мое приложение grails, которое использует GORM и Hibernate для сохранения объектов в БД.
Возможно, я не дал достаточно информации для начала, но мне действительно интересно узнать и обязательно предоставлю ее, если спросят, я просто не знаю, с чего начать.
ОБНОВИТЬ: Я могу подключиться к mysql, запустив двоичный файл в командной строке. Я также запустил mysql через tcp и не смог подключиться, проливает ли это свет на проблему?
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?
Спасибо,
Гав
Перво-наперво убедитесь, что сервер MySQL запущен и работает:
sudo /etc/init.d/mysqld status
Если это не так, запустите его:
sudo /etc/init.d/mysqld start
Основное различие между использованием mysql
утилита командной строки и использование драйвера MySQL JDBC заключается в том, что mysql
команда по умолчанию будет использовать файл сокета Unix (например, /tmp/mysql.sock
), тогда как драйвер JDBC всегда использует TCP / IP.
Попробуйте заставить mysql
для использования TCP / IP, передав --protocol=tcp
вариант и посмотрите, что произойдет. Это может дать вам более понятное сообщение об ошибке (или, если оно удастся, это тоже кое-что нам скажет).