Il peut arriver pour certains projets d’avoir besoin d’un accès en écriture sur un serveur mysql à distance.
Modifier la configuration du serveur Mysql
- sudo nano /etc/mysql/my.cnf
Et vérifier que ces lignes soient présentes ou commentées :
- # Mettre ici l'adresse IP de votre serveur
- bind-address = XXX.XXX.XXX.XXX
- # Cette ligne doit être commentée ou inexistante
- # skip-networking
Puis redémarrer le serveur :
- sudo /etc/init.d/mysql restart
Créer l’utilisateurs SQL dans phpmyadmin
Dans phpmyadmin, cliquer sur "Privilèges", qui mènera vers la page des autorisations d’accès au serveur.
Cliquez ensuite sur "Ajouter un utilisateur" qui mènera vers un formulaire pour ajouter une autorisation et remplissez comme suit en modifiant les valeurs qui vous intéressent :
- Ajouter un utilisateur : nom du nouvel utilisateur, il peut être le même qu’un autre utilisateur déjà existant (root par exemple). Ici nous mettrons "remote-user"
- Serveur : Correspond à l’adresse d’où l’utilisateur peut se connecter. Si c’est le cas d’une connexion d’IP fixe au serveur, on y mettra l’ip du serveur qui souhaite se connecter. Si la connexion est t souhaitée depuis plusieurs IP ou d’une IP non fixe, il faut autoriser toute connexion en mettant "%". Ici, nous mettrons %.
- Mot de passe : le mot de passe de l’utilisateur en question
Ensuite vous pouvez régler les privilèges de cet utilisateur pour le serveur en entier. Il est également possible de régler les privilèges table par table en ne donnant pas de droit sur le serveur et en réglant les privilèges dans chaque table.
Ouverture des ports du firewall
Il est ensuite nécessaire de pouvoir accéder au serveur mysql à travers le firewall. Le port par défaut du serveur est 3306
.
Si vous utilisez iptables
, il suffit de tapper :
- sudo /sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT
Cette commande ouvrira le port 3306 depuis toutes les machines.
Il est aussi possible de limiter à une adresse IP particulière de la sorte :
- /sbin/iptables -A INPUT -i eth0 -s XXX.XXX.XXX.XXX -p tcp --destination-port 3306 -j ACCEPT
Cette commande autorise alors la connection uniquement depuis l’adresse XXX.XXX.XXX.XXX
Si vous utilisez shorewall
, il faut modifier sa configuration de la sorte :
- sudo nano /etc/shorewall/rulesl
en ajoutant la ligne :
- ACCEPT:info net fw tcp 3306
Il est nécessaire ensuite de redémarrer shorewall
:
- sudo /etc/init.d/shorewall restart
Test de connexion
Pour tester la connexion, dans un terminal de la machine cliente, on essayera la commande :
- mysql -h XXX.XXX.XXX.XXX -u remote-user -p
Il est à noter que XXX.XXX.XXX.XXX
correspond ici à l’adresse ou au nom d’hôte sur lequel nous souhaitons nous connecter.
Vous devriez tomber sur l’application Mysql en ligne de commande sur le serveur distant.
Aller plus loin
- Faire de la réplication de serveur Mysql expliquée ici par azerttyu ou ici chez howtoforge