Java-MySql Connection refused

Fermé
Ouach Messages postés 3 Date d'inscription vendredi 7 juillet 2006 Statut Membre Dernière intervention 7 juillet 2006 - 7 juil. 2006 à 15:08
 asstall - 15 oct. 2008 à 21:52
Bonjour,
Permettez-moi de vous faire part de mon problème. J’ai créé sur un serveur Linux, une database mysql dans laquelle se trouve la table job-sheet. J’ai créé un user (« user ») avec un mot de passe (« mdp ») avec tout les accès nécessaires.
J’accède sans problème via la ligne commande ssh à la table job-sheet avec ce user, le serveur fonctionne donc.
J’ai créé un programme php qui accède à la table en s’exécutant sur le serveur et se connecte en local (localhost) sur le serveur avec le user, cela va sans problème.
if(($dbLink = mysql_connect("localhost", "user", "mdp")))
{
if(mysql_select_db("job-sheet ", $dbLink))
{...
Jusque là tout va bien.
J’ai créé un programme Java qui tourne sur une autre machine que je nommerai ‘client’. Dans ce programme j’accède à un fichier se trouvant sur le serveur.
URL url = new URL("http://192.168.50.100/process/bR3doT4s");
URLConnection uc = url.openConnection();
InputStream in = uc.getInputStream();

Cela fonctionne bien (la connexion physique client-serveur fonctionne donc)
Dans un autre programme Java, je tente d’accéder à la table, et là, cela ne fonctionne pas.
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;

public class Testconnection
{
public static void main(String[] args)
{
Connection conn = null;
String host = null;
String login = null;
String pw = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch (java.lang.ClassNotFoundException e)
{
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
catch(Exception e)
{
e.printStackTrace();
}
host = "jdbc:mysql://192.168.50.100/job-sheet ";
login = "user";
pw = "mdp";
try
{
conn = DriverManager.getConnection(host,login,pw);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

J’ai ce message d’erreur :
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused: connect

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection refused: connect

at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2565)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at Testconnection.main(Testconnection.java:33)

** END NESTED EXCEPTION **

Last packet sent to the server was 32 ms ago.
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2631)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at Testconnection.main(Testconnection.java:33)
Press any key to continue...

Je tourne ce programme en local sur la machine client. J’y ai créé avec phpMyAdmin une db et un user identique à ce qui se trouve sur le serveur, cela fonctionne. J’ai simplement modifié la ligne
host = "jdbc:mysql://localhost/job-sheet ";
Le driver est donc correctement installé
J’ai lu que c’est peut-être le port et le socket qui doivent être indiqué, j’ai exécuté cette commande dans le ssh sur le serveur :
netstat -l | grep mysql
pour obtenir :
unix 2 [ ACC ] STREAM LISTENING 4319 /var/run/mysqld/mysqld.sock
Dois-je en conclure que c’est le port 4319 et le socket /var/run/mysqld/mysqld.sock qu’il utilise ?
J’ai bien sur essayé :
host = "jdbc:mysql://192.168.50.100 :4319/job-sheet ";
Cela ne fonctionne pas.
(j’ignore comment indiquer le socket dans le programme Java)
D’autre part, sur le serveur, dans le fichier "/etc/mysql/my.cnf », il est noté :
port = 3306
J’ai bien sur également essayé :
host = "jdbc:mysql://192.168.50.100 :3306/job-sheet ";
Cela ne fonctionne pas non plus.
Connaissez-vous d’autres pistes que je n’aurais pas encore explorées ?
Merci d’avance.
A voir également:

5 réponses

Ouach Messages postés 3 Date d'inscription vendredi 7 juillet 2006 Statut Membre Dernière intervention 7 juillet 2006 2
7 juil. 2006 à 16:09
Bon, comme je suis toujours à tester, j'ai trouvé une solution.
Dans le fichier my.cnf, j'ai mis la ligne
bind-address = 127.0.0.1
en commentaire, puis redémaré le serveur mySql.
Cela fonctionne. Mais j'ignore les conséquences que cela pourrait avoir. Quelqu'un peut-il me dire s'il y a des risques ?
Merci d'avance.
1
Utilisateur anonyme
17 juil. 2006 à 09:41
Salut!

Je ne peux pas te dire si il y a des risques.

Par contre j'ai rencontré le même problème que toi en tentant de me connecter à la DB MySQL via JDBC.

Le problème ne survenait que lorsque mon firewall (pare-feu) était actif.
J'ai donc ajouté l'adresse IP de la machine cliente à la liste des IP autorisées à se connecter sur le serveur et ça a directement fonctionné.

;-)
HackTrack
1
pas de soucis, j'ai reussi à resoudre ce problème;

- premièrement, il faut que ton serveur Mysql soit configurer à etre accede en reseau en activant dans config wizard TCP/IP lors de ta configuration du serveur Mysql

- deuxiement, tu dois donner les droits d'access à ton utilisateur au serveur Mysql non pas en utilisant anlocalhost mais en utilisant l'adresse ip de la machine sur lequel se trouve le serveur Mysql dasn le shell comme ceci:

grant all privileges on *.* to 'root'@'192.168.50' identified by 'mypassword' with grant option

- troisiement, il faut que les les cartes reseaux de tes ordinateurs que tu veux utilisés soient bien connectées au reseau. NB: meme si ton serveur Mysql se trouve en local (localhost), il faut absolument que tu le connectes au reseau pour que ça marche

- quatriement, dans ton url mets un ? apres le nom de ta base comme ceci:

host = "jdbc:mysql://192.168.50.100 :3306/job-sheet?
bon courage
1
bonjour;
j'essaye de faire un exercice est de construire une application 'chat' entre un client et un serveuren utilisant les 'socket streams'. dont voici le code serveure:
package exo1;


import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;

public class SSock {
private Socket sock=null;
private int port=2048;

public void runServer(){
try{
ServerSocket ssock=new ServerSocket(port);
System.out.println("attente de connexion");
sock=ssock.accept();
System.out.println("connexion ok");
while(true){
AttendreConnexion();
GetStream();
TraiterConnexion();
FermerConnexion();

}
}
catch (IOException ioe){
System.out.println(ioe.getMessage());
}
}
public Socket getSocket(){
return sock;
}
public void AttendreConnexion(){

}
public void FermerConnexion(){

}
public void TraiterConnexion(){

}
public void GetStream(){

}
et le code client:
package exo1;

import java.io.IOException;
import java.net.*;

public class ClSock {

public static void main(String arg[]) {
int port =2048;
SSock ssock=new SSock();
ssock.start();
String serveur = "localhost";

try {
System.out.println("Demande de connexion");
/* Création de la socket sur le serveur localhost, via le port 80 */
Socket sock = new Socket(InetAddress.getLocalHost(), port);

// C'est le constructeur de java.net.Socket qui effectue les appels
// à getHostbyname(), à socket(), et à connect(), pour respectivement
// trouver le serveur à partir de son nom,
// créer le lien et configurer la structure sockaddr_in du serveur,
// et établir la connexion

/* Maintenant les entrées/sorties sur la socket sont possibles */
//System.out.println(" *** Connexion accomplie sur " + serveur + " ***");

// ...faire les entrées/sorties ici

/* Fermeture de la socket */
sock.close();

} catch(IOException ioe) {
System.err.println("Erreur de connexion sur " + serveur + " : " + ioe);
return;
}
}
public void AttendreConnexion(){

}
public void FermerConnexion(){

}
}


et en resultat ca marche pas et il me sort:
Erreur de connexion sur localhost : java.net.ConnectException: Connection refused: connect
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
comment skip-networking on /etc/my.cnf
1