1 votes

Tomcat ne peut pas communiquer avec MySql après une panne

J'ai raté un paiement pour mon serveur et ils ont suspendu mon compte pendant un jour ou deux. Lorsqu'ils ont relancé le serveur, toutes mes données étaient intactes, mais pour une raison quelconque, Tomcat ne peut pas établir une connexion JDBC avec mon serveur MySql. Ils tournent tous deux sur la même machine et donc j'ai une adresse de liaison de 127.0.0.1.

C'est étrange car j'ai réinitialisé la machine de mon propre chef auparavant sans problème, mais clairement quelque chose a été réinitialisé pendant l'interruption.

J'ai suivi ce guide (juste les parties qui ne concernent pas S3, je ne suis pas sur l'infrastructure Amazon) à l'origine et tout a fonctionné comme prévu.

Je suis très novice en tant que SysAdmin et je ne sais pas quoi essayer, comment aborderiez-vous ce problème de diagnostic? La trace de la pile que je reçois est la suivante;

INFO: Déploiement de l'archive de l'application web myapp-1.1.war
2010-05-26 22:07:22,221 [main] ERREUR context.ContextLoader  - L'initialisation du contexte a échoué
org.springframework.beans.factory.BeanCreationException: Erreur lors de la création du bean avec le nom 'messageSource': L'initialisation du bean a échoué ; l'exception imbriquée est org.springframework.beans.factory.BeanCreationException: Erreur lors de la création du bean avec le nom 'transactionManager': Impossible de résoudre la référence au bean 'sessionFactory' lors du réglage de la propriété du bean 'sessionFactory' ; l'exception imbriquée est org.springframework.beans.factory.BeanCreationException: Erreur lors de la création du bean avec le nom 'sessionFactory': Impossible de résoudre la référence au bean 'hibernateProperties' lors du réglage de la propriété du bean 'hibernateProperties' ; l'exception imbriquée est org.springframework.beans.factory.BeanCreationException: Erreur lors de la création du bean avec le nom 'hibernateProperties': Impossible de résoudre la référence au bean 'dialectDetector' lors du réglage de la propriété du bean 'properties' avec la clé [hibernate.dialect] ; l'exception imbriquée est org.springframework.beans.factory.BeanCreationException: Erreur lors de la création du bean avec le nom 'dialectDetector': L'invocation de la méthode d'initialisation a échoué ; l'exception imbriquée est org.springframework.jdbc.support.MetaDataAccessException: Impossible d'obtenir une connexion pour extraire les métadonnées ; l'exception imbriquée est org.springframework.jdbc.CannotGetJdbcConnectionException: Impossible d'obtenir une connexion JDBC ; l'exception imbriquée est org.apache.commons.dbcp.SQLNestedException: Impossible de créer PoolableConnectionFactory (Échec de la liaison de communication

Le dernier paquet a été envoyé avec succès au serveur il y a 0 millisecondes. Le pilote n'a reçu aucun paquet du serveur.)
        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)

...

Je reçois cette erreur pour plusieurs 'beans'.

Si je tape mysql à mon invite de commandes, je peux facilement me connecter avec les mêmes informations d'identification que mon application grails qui utilise GORM et Hibernate pour persister les objets dans la base de données.

Je n'ai peut-être pas donné suffisamment d'informations pour commencer, mais je suis vraiment intéressé à apprendre et je les fournirai certainement si on me le demande, je ne sais juste pas par où commencer sur celui-ci.

MISE À JOUR : Je peux me connecter à mysql en exécutant le binaire en ligne de commande. J'ai également exécuté mysql sur tcp et n'ai pas pu me connecter, cela éclaire-t-il d'une quelconque lumière sur le problème?

root@88:~# mysql -u grails --protocol=tcp -p
Entrez votre mot de passe :
ERROR 2003 (HY000): Impossible de se connecter au serveur MySQL sur 'localhost' (110)

J'ai bind-address à 127.0.0.1 comme discuté précédemment, donc peut-être n'est-ce pas surprenant que cela ne fonctionne pas. Y a-t-il quelque chose que je dois vérifier dans mon fichier hosts?

Merci,

Gav

1 votes

Il s'est avéré que mon interface lo était désactivée. La commande ifconfig lo up l'a corrigée.

0voto

Matt Solnit Points 913

La principale différence entre l'utilisation de l'utilitaire en ligne de commande mysql et l'utilisation du pilote JDBC MySQL est que la commande mysql utilisera par défaut un fichier de socket Unix (par exemple /tmp/mysql.sock), alors que le pilote JDBC utilise toujours TCP/IP.

Essayez également de forcer la commande mysql à utiliser TCP/IP, en passant l'option --protocol=tcp, et voyez ce qui se passe. Cela pourrait vous donner un message d'erreur plus éclairant (ou, si cela réussit, cela nous indiquera quelque chose aussi).

0 votes

Root@88:~# mysql -u grails --protocol=tcp -p Entrez le mot de passe: ERREUR 2003 (HY000): Impossible de se connecter au serveur MySQL sur 'localhost' (110)

0 votes

Salut Matt, merci d'avoir répondu, il semble que je ne puisse pas me connecter via TCP! Cela a-t-il réduit le problème à mon.cnf? Ou peut-être devais-je spécifier un port avec la commande? Voir la mise à jour dans la question initiale. Merci.

0voto

Tout d'abord, assurez-vous que le serveur MySQL est en marche :

sudo /etc/init.d/mysqld status

Si ce n'est pas le cas, démarrez-le :

sudo /etc/init.d/mysqld start

0 votes

Cela a démarré et fonctionne, je peux me connecter en utilisant mysql en ligne de commande et toutes mes données et tables sont toujours intactes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X