Bonjour,
J'ai un problème pour me connecter à partir d'un client JAVA à ma BDD MySQL "freez" qui est située sur un serveur distant "emotion" (situé dans un réseau
universitaire).
J'utilise donc un client SSH (PuTTY) pour faire un tunnel SSH avec les ports 3306 (MySQL) vers mon serveur (OS = Debian).
Voici l'équivalent pour Mac et Linux :
MySQL est configuré par défaut pour ne pas accepter les connexions externes, j'ai donc changé cela dans le fichier de configuration de MySQL sur le serveur : /etc/mysql/my.cnf
Code : Sélectionner tout - Visualiser dans une fenêtre à part ssh -N -T -L 3306:emotion:3306 monlogin@res.iut-velizy.uvsq.fr
est devenu
Code : Sélectionner tout - Visualiser dans une fenêtre à part bind-address = 127.0.0.1
NB : 10.0.0.46 = l'adresse de ma machine sur le réseau universitaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part bind-address = 10.0.0.46
J'ai ensuite changé ,grâce à phpmyadmin, les privilèges de l'utilisateur MySQL "hote" utilisé pour la connexion avec mon client java :
Puis j'ai redémarré MySQL grâce à la commande suivante :General :
Utilisateur = hote
Serveur = % (tous)
Mot de passe = Non
Privilèges = usage
Grant = Non
Privilèges spécifiques à une base de données:
Base = freez
Droits = SELECT, INSERT, UPDATE, DELETE
Grant = Non
Privilèges spécifiques à une table = Non
Mes identifiants sont valides et j'ai bien compilé en précisant le driver (situé dans le même répertoire que ma classe) dans le classpath :
Code : Sélectionner tout - Visualiser dans une fenêtre à part /etc/init.d/mysql restart
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2>javac -classpath "D:\Documents\Boulot\E-motion\Developpement\Accès aux bdd\mysql-connector-java-5.1.5-bin.jar;." *.java
Voici le code de mon client JAVA:
J'ouvre alors mon tunnel SSH.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 import java.sql.*; class connexion { StringBuffer resultat= new StringBuffer(); int nCol; public connexion () { envoiRequete(); } void envoiRequete() { //Connexion try { String nomDriver = "com.mysql.jdbc.Driver"; Connection conn=null; try { Class.forName(nomDriver); conn = DriverManager.getConnection("jdbc:mysql://10.0.0.46:3306/freez?","hote",""); } catch(ClassNotFoundException cnfe) { System.out.println("La classe "+nomDriver+" n'a pas été trouvée"); cnfe.printStackTrace(); } //Requete Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * from event;"); ResultSetMetaData rsmd = rs.getMetaData (); while (rs.next ()) { String tmp= ""; for (int i = 1; i <= nCol ; ++i) { switch (rsmd.getColumnType (i)) { case Types.INTEGER: tmp = ""+rs.getInt (i); break; case Types.CHAR: tmp = ""+rs.getString (i); break; default: System.out.println("Type non implémenté"); break; } resultat.append (tmp+"\t"); } resultat.append ("\n"); } //Affichage du resultat System.out.println(resultat.toString()); //Fin de connexion conn.close(); } catch (SQLException ex) { System.out.println("Exception: " + ex.toString()); ex.printStackTrace() ; } } public static void main(String argv[]) { new connexion (); } }
Quand je lance le programme, l'accès à la base de donnée m'est refusée :
Je pense que cela viens du fait que j'utilise un tunnel SSH. Ou alors d'une mauvaise configuration de MySQL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1 074) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2104) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:729) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou rce) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java :283) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at connexion.envoiRequete(connexion.java:22) at connexion.<init>(connexion.java:9) at connexion.main(connexion.java:68) Caused by: java.net.ConnectException: Connection timed out: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.ja va:256) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:276) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2027) ... 14 more
J'ai également pensé au firewall qui bloquerais ma connexion, j'ai donc essayé avec un client Linux, mais sans succès.
Je vous en prie, aidez moi, cela fait 4 jour que je me casse la tête sur ce problème. Je commence sérieusement à perdre espoir...
Partager