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 :
- La configuration de MySQL (ex.
bind-address
, comptes utilisateurs). - Le pare-feu de l’OS (Windows Firewall, ufw, firewalld, iptables, CSF, etc.).
- É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
- Ouvrir
services.msc
. - Rechercher le service MySQL (ex. MySQL80), clic droit → Propriétés.
- Dans le champ Chemin du binaire, si vous voyez l’option
--defaults-file="..."
, c’est le fichier à modifier. - Sinon, le service utilise le fichier
my.ini
dansC:\ProgramData\MySQL\MySQL Server X.X\my.ini
par défaut.
Option B – Vérification manuelle si MySQL est dans le PATH
- Exécuter la commande suivante pour générer le fichier d’aide :
- Ouvrir
help.txt
et chercher les lignes commençant par Default options are read from the following files. - Le dernier fichier existant dans la liste est celui utilisé par MySQL.
mysql --help > help.txt
💡 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
- Ouvrir Windows Defender Firewall with Advanced Security → Inbound Rules.
- New Rule → Port → TCP → 3306 → Allow the connection.
- Choisir les profils Domain/Private/Public (éviter Public).
- 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é.