IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

échec connection MySQL


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 46
    Points
    46
    Par défaut échec connection MySQL
    Bonjour à tous,

    Je développe une petite application locale en java avec une base de données MySQL. J'ai paramétré la base de données avec MySQL server 5.1.

    Quand je coche la case "enable TCP/IP Networking", la connection à la base de données fonctionne très bien avec le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Chargement du driver specifique au sgbd
    Class.forName("com.mysql.jdbc.Driver"); 
    //Connexion a la base de données 
    conn = DriverManager.getConnection("jdbc:mysql://localhost/db_name", "root", "admin");
    Par contre lorsque je désactive le "TCP/IP Networking", la connection à la BD est un échec (Communication link failure). Pourtant j'ai toujours accès à la base de données en ligne de commande depuis la console.

    Voila mon problème, je sais pas si j'ai été très clair.
    Merci par avance

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    La différence vient du fait que la ligne de commande n'utilise pas TCP/IP pour les transferts de données. Alors que le driver JDBC passe par la couche TCP/IP. Rien de bien exceptionnel.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    ajoute le N° du port et tout devrait rentrer dans l'ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Chargement du driver specifique au sgbd
    Class.forName("com.mysql.jdbc.Driver"); 
    //Connexion a la base de données 
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_name", "root", "admin");

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Merci pour vos réponse.

    Sinok : Alors il faut que j'utilise un autre driver que le JDBC car que je ne veux pas utiliser la couche TCP/IP pour cette application. Elle doit être exécuté sur un ordinateur en local. Quel driver dois je utiliser?

    Georges :Même en ajoutant le numéro du port, la connection à la base de données est un échec.

    J'ai trouvé une solution mais je ne sais pas si c'est très propre? Dans mon fichier de paramétrage MySQL "my.ini", j'ai commenté la ligne "skip-networking" et la connection à la BD fonctionne correctement avec le driver JDBC.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [mysqld]
    #skip-networking
    enable-named-pipe
    socket=mysql
    ...

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ben oui, pour que la db soit accessible par réseau, vaut mieux que sa couche réseau soit active

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Ben justement, je veux que la BD ne soit pas accessible sur le réseau

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il suffit juste que tu aies des utilisateurs de disponible.

    Ensuite en général un serveur qui sert à faire tourner une base de données est relié via le réseau à un nombre de machines limitées (en général le serveur d'application et les machines des DBA c'est tout) en passant par le firewall (c'est à dire que le serveur n'accepte les connexion que depuis un nombre limité de machines).
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    de toutes façons, tu ne sauras pas désactiver le réseau ET avoir un accès via le driver jdbc. Tes options sont

    -> le firewall comme indiqué
    -> avoir mysql qui n'écoute que sur "localhost" et java qui tourne sur la même machine
    -> configurer une dmz et mettre mysql et java dedans (similaire au principe du firewall)

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Merci pour votre aide, je comprends un peu mieux maintenant.
    J'ai donc réussi à paramétrer mon server MySQL en modifiant le fichier my.ini de la façon suivante :

    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
     
    [client]
    pipe
    socket=mysql
     
    [mysql]
    default-character-set=latin1
     
    [mysqld]
     
    #skip-networking
    enable-named-pipe
    socket=mysql
     
    basedir="C:/Program Files/MySQL/MySQL Server 5.1/"
    datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/"
     
    character-set-server=latin1
    default-storage-engine=INNODB
     
    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
     
    max_connections=1
    query_cache_size=0
    table_cache=256
    tmp_table_size=9M
    thread_cache_size=8
     
    #*** MyISAM Specific options
    myisam_max_sort_file_size=100G
    myisam_sort_buffer_size=18M
    key_buffer_size=11M
    read_buffer_size=64K
    read_rnd_buffer_size=256K
    sort_buffer_size=256K
     
     
    #*** INNODB Specific options ***
    #skip-innodb
    innodb_additional_mem_pool_size=2M
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=1M
    innodb_buffer_pool_size=18M
    innodb_log_file_size=10M
    innodb_thread_concurrency=8
    Ensuite j'ai ajouté une exception TCP dans mon pare-feu :
    nom exception : MySQL Server
    num port : 3306

    Voila tout à l'air de fonctionner maintenant, je peux utiliser MySQL et Java sur ma machine en local. Je ne sais pas si tout est propre dans ce que j'ai fais ou alors si c'est de la bidouille (oui c'est moi jo la bidouille)

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par RomG7 Voir le message
    Ensuite j'ai ajouté une exception TCP dans mon pare-feu :
    nom exception : MySQL Server
    num port : 3306

    Voila tout à l'air de fonctionner maintenant, je peux utiliser MySQL et Java sur ma machine en local.
    Si tout se fait en local, vous n'avez pas besoin, justement, d'ouvrir le port sur le parefeu, a priori.

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Juste pour information mon fichier my.ini vous semble correctement paramétré.
    J'ai donc du commenter la ligne #skip-networking dans mysqld pour que mon driver jdbc fonctionne dans java et j'ai initialisé la variable max_connections à 1 car cette application fonctionne sur un et un seul poste en local.

    En tout cas, merci à tous pour votre aide, l'administration réseau c'est pas trop ma tasse de thé.

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    le mieux serait plutot de mettre

    bind-address=127.0.0.1

    dans ton fichier de config

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Je connaissais pas cette propriété bind-address, pourtant ce n'est pas faute d'avoir cherché. Cela me parait beaucoup cohérent.
    Je me répète mais encore une fois merci beaucoup, j'ai maintenant tous les éléments pur continuer mon travail.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debugage] Connection Mysql
    Par e1lauren dans le forum MFC
    Réponses: 6
    Dernier message: 25/04/2005, 16h18
  2. [JAR]Connection Mysql et jar executable
    Par Jones dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/04/2005, 14h27
  3. Nombre max de connections MySQL ?
    Par RorolePro dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/11/2004, 14h16
  4. problème de connection mysql par tcp/ip
    Par leroyphil dans le forum Administration
    Réponses: 5
    Dernier message: 04/09/2003, 18h27
  5. [Kylix] Pb connection à Mysql
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 25/04/2002, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo