Accéder à un serveur MYSQL sur le réseau

Lorsque vous installez un serveur MYSQL (ou un serveur LAMP avec tasksel), celui ci est paramétré par défaut pour n’autoriser que les connexions provenant de localhost, pour des raisons de sécurité.

[root@halter]:# telnet 10.0.0.134 3306
Trying 10.0.0.134...
telnet: Unable to connect to remote host: Connection refused

Si on effectue un scan de port sur l’ordinateur hébergeant le serveur Mysql, on voit bien que le port par défaut de Mysql, le 3306, n’apparait pas. Il est donc impossible de se connecter à se serveur depuis un autre ordinateur du réseau.

[root@halter]:# nmap 10.0.0.134</code>
 
Starting Nmap 4.76 ( http://nmap.org ) at 2010-04-04 15:15 CEST
Interesting ports on vdomaine.com (10.0.0.134):
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
2000/tcp open  callbook
MAC Address: 00:1E:2A:B4:CA:xx (Netgear)

Pour indiquer au serveur qu’il doit autoriser les connexions provenant d’autres ordinateurs du réseau, il faut modifier le fichier de configuration de Mysql, le fichier /etc/mysql/my.cnf et modifier 2 lignes:

La première, dé-commentée par défaut, indique au serveur d’ignorer les requêtes extérieures. Il faut donc la commenter (ou la supprimer)

#skip-external-locking

La seconde indique au serveur sur quelle adresse il faut écouter les requètes. Par défaut, il s’agit de 127.0.0.1. Si vous voulez autoriser le réseau local, n’indiquez pas une adresse réseau mais bien l’adresse du serveur sur le réseau. D’où l’intérêt d’avoir des réglages IP fixes ou des baux permanents attribués par le DHCP. Dans le cas contraire, je vous promet des heures de recherche infructueuses avant de revenir dessus.

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 10.0.0.134

Une fois le serveur Mysql relancé, un nouveau scan montre l’ouverture effective pour Mysql:

[root@halter]:# nmap 10.0.0.134</code>
 
Starting Nmap 4.76 ( http://nmap.org ) at 2010-04-04 15:16 CEST
Interesting ports on vdomaine.com (10.0.0.134):
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
2000/tcp open  callbook
3306/tcp open  mysql
MAC Address: 00:1E:2A:B4:CA:xx (Netgear)

A partir de ce moment, une connexion au serveur a déjà beaucoup plus de chances de réussir:

manu@halter:~$ mysql -p -h 10.0.0.134 -u othtest -P 3306
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 5.1.41-3ubuntu11 (Ubuntu)
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql&gt;

Ce n’est pas une astuce extraordinaire, mais maintenant que j’en ai fait un article, je suis sûr de m’en souvenir et de ne plus perdre une matinée à trouver le problème lorsque je rechangerais mon adressage… Alors, j’imagine que ça sera utile pour d’autres que moi.

Articles en relation:

5 réflexions sur « Accéder à un serveur MYSQL sur le réseau »

  1. « La première, dé-commentée par défaut, indique au serveur d’ignorer les requêtes extérieures » : ce n’est pas vrai.
    http://dev.mysql.com/doc/refman/5.0/fr/system.html : « L’utilisation de l’option –skip-external-locking de MySQL empêche les verrous externes. Cela n’influencera pas les fonctionnalités de MySQL tant que vous n’utilisez qu’un seul serveur ».
    Il suffit juste de commenter la ligne bind mais également d’autoriser l’utilisateur souhaité à se connecter à distance.

  2. @ julito
    C’est tout à fait juste… sauf que dans mon cas ça ne fonctionnait pas tant que cette ligne n’était pas commentée. Et sur deux installations différentes.
    Étant donné que je n’ai qu’un seul serveur MySql accédant aux tables, ce qui est le cas de 99% des gens, activer ou pas cette option ne change rien au fonctionnement. Sauf que ça me permet de me connecter au serveur.
    Mais c’est vrai que je l’ai très mal expliqué.

  3. Bonjour,

    il est bien plus sécurisé de se connecter en localhost, c’est à dire sans changer la configuration du serveur MySQL.

    Il suffit simplement de créer un tunnel SSH (option -L) et le tour est joué.

    Si on aime les interfaces graphiques, le paquet mysql-admin donne un confort indéniable pour la plupart des opérations sur les bases.

    A bientôt
    Grégoire

  4. Bonjour,

    il est bien plus sécurisé de se connecter en localhost, c’est à dire sans changer la configuration du serveur MySQL.

    Il suffit simplement de créer un tunnel SSH (option -L) et le tour est joué.

    Si on aime les interfaces graphiques, le paquet mysql-admin donne un confort indéniable pour la plupart des opérations sur les bases.

    A bientôt
    Grégoire

  5. C’est vrai. Sauf qu’on fait comment pour faire tourner une appli sur windows et se connecter au serveur sql???
    S’il faut ajouter des applis pour ça, sur un réseau local, autant ouvrir le serveur mysql à la connexion depuis le réseau.

Les commentaires sont fermés.