Résumé : Ce guide explique comment configurer MySQL pour les connexions externes et comment ouvrir/autoriser le port TCP 3306 sur Windows et Linux. Inclut des bonnes pratiques de sécurité et des commandes de test.


Introduction

Pour accéder à MySQL depuis un autre poste ou serveur, il faut coordonner :

  1. La configuration de MySQL (ex. bind-address, comptes utilisateurs).
  2. Le pare-feu de l’OS (Windows Firewall, ufw, firewalld, iptables, CSF, etc.).
  3. Éventuellement : pare-feu réseau / routeur / règles cloud (groupes de sécurité).

Prérequis & recommandations de sécurité

  • Par défaut, MySQL écoute sur 127.0.0.1 et n’accepte pas de connexion externe.
  • N’ouvrez pas le port 3306/TCP à tout le monde sauf si nécessaire. Restreignez aux IP autorisées.
  • Désactivez l’accès distant pour l’utilisateur root ou restreignez-le.
  • Privilégiez un tunnel SSH ou VPN plutôt que d’exposer MySQL directement sur Internet.
  • Utilisez SSL/TLS si possible pour chiffrer les connexions.
  • Sauvegardez vos fichiers de configuration avant modification.

1. Configuration de MySQL pour accepter les connexions externes

1.1 Ajouter ou modifier bind-address

Si vous ne trouvez pas la ligne bind-address dans le fichier my.ini (Windows) ou mysqld.cnf (Linux), il faut l’ajouter manuellement dans la section [mysqld] :

[mysqld]
bind-address = 0.0.0.0

0.0.0.0 autorise toutes les IPs externes.

– Pour limiter l’accès, remplacez par l’IP spécifique de votre serveur.

Puis redémarrez MySQL :

sudo systemctl restart mysql
# ou pour Windows
net stop mysql
net start mysql

1.2 Créer / configurer l’utilisateur MySQL pour l’accès distant

CREATE USER 'monuser'@'IP_CLIENT' IDENTIFIED BY 'motdepasse';
GRANT SELECT, INSERT, UPDATE, DELETE ON ma_base.* TO 'monuser'@'IP_CLIENT';
FLUSH PRIVILEGES;

Pour autoriser depuis n’importe quelle IP (moins sécurisé) : 'monuser'@'%'.

1.3 Identifier le fichier my.ini utilisé sur Windows

Si plusieurs fichiers my.ini existent, il faut modifier celui que MySQL lit réellement :

Option A – Via le service Windows

  1. Ouvrir services.msc.
  2. Rechercher le service MySQL (ex. MySQL80), clic droit → Propriétés.
  3. Dans le champ Chemin du binaire, si vous voyez l’option --defaults-file="...", c’est le fichier à modifier.
  4. Sinon, le service utilise le fichier my.ini dans C:\ProgramData\MySQL\MySQL Server X.X\my.ini par défaut.

Option B – Vérification manuelle si MySQL est dans le PATH

  1. Exécuter la commande suivante pour générer le fichier d’aide :
  2. mysql --help > help.txt
  3. Ouvrir help.txt et chercher les lignes commençant par Default options are read from the following files.
  4. Le dernier fichier existant dans la liste est celui utilisé par MySQL.

💡 Toujours faire une sauvegarde avant modification :

copy "C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" "C:\ProgramData\MySQL\MySQL Server 8.0\my.ini.bak"

2. Configuration du pare-feu Windows pour MySQL

Méthode graphique

  1. Ouvrir Windows Defender Firewall with Advanced Security → Inbound Rules.
  2. New Rule → Port → TCP → 3306 → Allow the connection.
  3. Choisir les profils Domain/Private/Public (éviter Public).
  4. Nommer la règle, ex. MySQL Inbound 3306, et valider.

Méthode ligne de commande

netsh advfirewall firewall add rule name="MySQL 3306" dir=in action=allow protocol=TCP localport=3306

3. Configuration du pare-feu Linux pour MySQL

UFW (Ubuntu/Debian)

sudo ufw allow from IP_CLIENT to any port 3306 proto tcp
sudo ufw status

firewalld (CentOS/RHEL/Fedora)

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

iptables

sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo iptables-save

4. Vérifications & tests

sudo ss -ltnp | grep 3306
# ou
nc -zv SERVEUR_IP 3306

5. Exemple résumé

Ubuntu : ajouter ou modifier bind-address, redémarrer MySQL, créer l’utilisateur, ouvrir le port avec UFW.

Windows : identifier le fichier my.ini via le service, ajouter ou modifier bind-address, redémarrer le service, créer règle firewall.


6. Points de vigilance

  • Ne laissez jamais root@'%' accessible.
  • Limiter les IP dans le pare-feu.
  • Utiliser VPN ou tunnel SSH plutôt qu’un accès direct.
  • Activer SSL/TLS si possible.
  • Sur cloud, ouvrir le port dans les groupes de sécurité.