2012-02-15 5 views
2

J'ai un serveur mysql local sur mon bureau Ubuntu 11.10. Le nom d'hôte = localhost; nom d'utilisateur = root; mot de passe = root; nom de la base de données = CBS. Je suis vraiment confus parce que quand j'accède mysql using terminal, mysql administrator, et mysql query browser j'utilise ces authentification que j'ai mentionnées ci-dessus et tout est OK. Mon problème est quand je configure mes jdbc.properties dans mon Java App Je reçois cette erreur:JDBC Hibernate - Erreur de connexion Mysql

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [28000]; error code [1045]; Access denied for user 'root '@'localhost' (using password: YES); nested exception is java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)

Mon fichier de configuration, jdbc.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost:3306/CBS 
jdbc.username=root 
jdbc.password=root 

Par ailleurs, la raison pour laquelle je J'utiliserai le serveur local car notre serveur principal est arrêté, donc je dois utiliser mon mysql local pour continuer mon projet. S'il vous plaît aidez-moi ... Merci d'avance.

+1

Quel est votre nom d'hôte lorsque vous utilisez mysql adminstrator (ou les autres outils)? Comme duffymo mentionné ci-dessous, vous pouvez avoir un problème de subvention avec cet utilisateur se connectant à localhost. Je n'ai vu aucune mention sur le nom d'hôte dans la première partie de votre message. – jmq

+1

exécutez-vous votre "application Java" en utilisant des racines root? Lorsque votre application est lancée - vérifiez-la en utilisant "ps -ef | grep " et voyez quel utilisateur l'exécute - au cas où ce n'est pas "root" vous avez votre réponse là. – alfasin

+0

@jmquigley localhost – NinjaBoy

Répondre

2

Vous devrez peut-être accorder des autorisations pour accéder à la base de données.

Regardez la documentation MySQL pour quelque chose qui ressemble à ceci:

create database pmt; 
create user pmt identified by 'pmt'; 
grant all on pmt.* to 'pmt'@'%'; 

« VPM » est juste un exemple ci-dessus. Il m'est arrivé de faire le nom de la base de données, nom d'utilisateur et mot de passe tout de même. Je ne recommande pas cela comme une bonne pratique. C'est juste quelque chose que j'ai fait pour un développement local.

Personnellement, je n'aime pas donner un accès root à n'importe quelle application. Je n'utiliserais pas le nom d'utilisateur et le mot de passe root même dans une application jouet. Cela ne prend pas beaucoup d'effort pour créer un nouvel utilisateur et octroyer des autorisations appropriées.

+0

Comment vais-je faire ça? Pourriez-vous s'il vous plaît me montrer. Im nouveau à cette chose. – NinjaBoy

+0

Dois-je redémarrer mon serveur après avoir exécuté ces commandes? – NinjaBoy

+0

redémarrer mysql? non. – duffymo

5

Il est plus que probable que votre infrastructure se connecte à votre base de données locale en tant que 127.0.0.1. Ce qui créera un problème de connexion dans MySQL si vous n'avez pas défini de référence de domaine appropriée. Essayez ceci pour vérifier:

mysql -uroot -proot 
SELECT * from mysql.user WHERE user = 'root'; 

S'il n'y a pas « root'@'127.0.0.1 » ont alors trouvé le problème et d'y remédier, effectuez l'une des deux choses:

  1. définir un domaine Identificateur de domaine pour 'root', à '127.0.0.1'.
  2. Définissez un identifiant de domaine générique pour 'root', vous pouvez donc vous connecter à votre MySQL avec ces informations d'identification à partir de plusieurs emplacements.

Voici un exemple de la seconde:

mysql -uroot -proot 

CREATE USER 'root'@'%' IDENTIFIED BY 'root'; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; 
FLUSH PRIVILEGES; 

Sur une note côté, je recommande d'utiliser quelque chose de plus créatif pour votre nom d'utilisateur et mot de passe. Surtout si vous avez activé les sockets TCP pour votre serveur.

+0

Lorsque j'ai exécuté la commande SELECT * des utilisateurs WHERE utilisateur = 'root'; quelle base de données vais-je utiliser pour voir si j'ai un 'root'@'127.0.0.1'? Im nouveau à ceci. – NinjaBoy

+0

En fait, la commande est 'select * de mysql.user où user = 'root';'. J'ai mis à jour ma réponse. – Perception

+0

J'ai vu beaucoup de caractères aléatoires comme '+' et '-'. Cependant j'ai vu cette ligne: | localhost | racine | * 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y. Est-ce que cela signifie que j'ai une racine? – NinjaBoy