TL;DRLe port 3306 est la porte d'entrée réseau de tout serveur MySQL ou MariaDB : c'est par lui que Symfony et PrestaShop dialoguent avec la base de données. Voici comment il fonctionne, comment le vérifier en ligne de commande et comment le sécuriser en production.

Qu'est-ce que le port 3306 ?#

Le port 3306 est le port TCP utilisé par défaut par le serveur MySQL, et par MariaDB qui en a hérité, pour accepter les connexions réseau entrantes. Quand un client (l'interface en ligne de commande mysql, un outil comme phpMyAdmin, ou une application PHP via l'extension PDO) se connecte à une base par IP ou par nom d'hôte, c'est ce port que le système d'exploitation ouvre côté serveur pour dialoguer avec le processus mysqld.

Ce choix de numéro n'a rien de réglementaire au sens strict. Contrairement au port 80 (HTTP) ou au port 443 (HTTPS), fixé par un standard, 3306 a simplement été retenu par les développeurs de MySQL puis enregistré auprès de l'IANA, l'organisme qui tient le registre officiel des ports. C'est un usage devenu convention, pas une contrainte technique.

En local, sur la même machine, la connexion peut aussi passer par un socket Unix (un fichier, souvent /var/run/mysqld/mysqld.sock) plutôt que par TCP/3306, ce qui évite la pile réseau et gagne en rapidité. Mais dès que le client et le serveur ne sont pas sur la même machine, ou tournent dans des conteneurs séparés, c'est bien le port 3306, ou celui configuré à sa place, qui est sollicité.

Vérifier et interroger le port en SQL et en ligne de commande#

Plusieurs commandes permettent de vérifier quel port un serveur MySQL écoute réellement, ou de forcer une connexion sur un port précis. Depuis une session SQL déjà ouverte, la variable système port donne la réponse :

SHOW VARIABLES LIKE 'port';

Pour se connecter explicitement sur le port 3306 depuis un terminal :

mysql -h 127.0.0.1 -P 3306 -u websource -p

Et pour repérer les connexions actuellement ouvertes sur le serveur, utile pour vérifier qu'aucune connexion suspecte ne traîne :

SHOW PROCESSLIST;

Côté configuration serveur, le port se fixe dans le fichier my.cnf (ou dans mariadb.conf.d sur Debian/Ubuntu), dans la section [mysqld] :

[mysqld]
port = 3306
bind-address = 127.0.0.1

bind-address mérite autant d'attention que le port lui-même : c'est elle qui détermine sur quelle interface réseau le serveur accepte des connexions, localhost, une IP privée, ou toutes les interfaces avec 0.0.0.0. Ce dernier cas est à éviter en production sans pare-feu strict derrière.

Le port 3306 dans nos projets Symfony#

Sur les projets Symfony que nous développons et hébergeons, la connexion à la base passe par Doctrine, et le port fait partie intégrante de la variable DATABASE_URL définie dans .env ou .env.local :

DATABASE_URL="mysql://websource:motdepasse@127.0.0.1:3306/nom_base?serverVersion=8.0&charset=utf8mb4"

Si ce port n'est pas précisé, Doctrine DBAL retombe sur 3306 par défaut, ce qui fonctionne tant que la base tourne sur son port standard, mais casse silencieusement dès qu'elle a été déplacée sur un autre port. C'est l'une des premières choses que nous vérifions quand une installation Symfony ne parvient pas à joindre sa base : le port déclaré dans DATABASE_URL correspond-il à celui réellement ouvert par le serveur MySQL ou MariaDB ciblé ?

Le port 3306 dans nos projets PrestaShop#

PrestaShop suit la même logique, avec sa propre configuration. Le serveur de base de données se déclare lors de l'installation, puis dans app/config/parameters.php, sous la forme hôte:port quand le port diffère du standard :

define('_DB_SERVER_', '127.0.0.1:3306');
define('_DB_NAME_', 'nom_boutique');

Sur nos hébergements de boutiques PrestaShop, plusieurs bases cohabitent souvent sur le même serveur MySQL, donc sur le même port 3306 : c'est l'identifiant de connexion, pas le port, qui isole chaque client. Le port ne devient un vrai sujet que lorsqu'une boutique migre vers un serveur de base dédié, ou lorsqu'un module tiers embarque sa propre connexion et qu'il faut vérifier qu'il pointe bien vers le bon serveur.

Sécuriser l'accès au port 3306 : la checklist#

Le port 3306 est l'un des ports les plus scannés sur Internet, précisément parce qu'il est prévisible. Quelques vérifications simples réduisent nettement la surface d'attaque :

  1. Vérifiez que bind-address n'expose pas le serveur sur une interface publique sans nécessité : localhost ou une IP privée suffisent dans la majorité des architectures.
  2. Filtrez le port 3306 par pare-feu (ufw, iptables, groupe de sécurité cloud) pour n'autoriser que les IP qui doivent réellement s'y connecter.
  3. Créez des utilisateurs MySQL restreints par hôte d'origine (par exemple 'appli'@'10.0.0.5') plutôt que des comptes ouverts à '%', qui acceptent n'importe quelle IP.
  4. N'accordez que les privilèges strictement nécessaires (GRANT SELECT, INSERT, UPDATE, DELETE ON base.* plutôt que ALL PRIVILEGES) à chaque compte applicatif.
  5. Changer le numéro de port par défaut réduit le bruit des scans automatiques les plus basiques, mais ne remplace aucune des mesures précédentes : ce n'est pas une mesure de sécurité à elle seule.
  6. Si la base est interrogée au-delà d'un réseau privé de confiance, chiffrez la connexion (TLS) plutôt que de faire circuler les identifiants en clair.

Questions fréquentes#

Faut-il changer le port 3306 par défaut ?#

Ce n'est pas indispensable si l'accès au port est déjà correctement filtré par pare-feu et restreint aux bonnes IP. Le changer réduit le bruit des scans automatiques, mais sans filtrage réseau en complément, cela n'apporte qu'une protection illusoire.

Le port 3306 doit-il être accessible depuis Internet ?#

Dans l'immense majorité des architectures web, non. L'application (Symfony, PrestaShop) et la base de données communiquent sur un réseau privé ou en localhost. Ouvrir 3306 au public ne se justifie que dans des cas précis, comme une administration à distance sécurisée par ailleurs.

Quelle est la différence entre une connexion par port TCP et par socket Unix ?#

Le socket Unix est un fichier local utilisé quand le client et le serveur MySQL tournent sur la même machine : plus rapide, car il évite la pile réseau. Le port TCP 3306 devient nécessaire dès que la connexion traverse le réseau, entre deux serveurs ou deux conteneurs distincts.

MariaDB utilise-t-il un port différent de MySQL ?#

Non, MariaDB reprend le port 3306 par défaut, par compatibilité directe avec MySQL. Les deux moteurs peuvent cohabiter sur des ports différents sur une même machine, à condition de le déclarer explicitement dans leur configuration respective.

Comment savoir si mon port 3306 est exposé publiquement ?#

Depuis une machine externe, une commande comme telnet ou un scanner de ports donne la réponse : si la connexion s'établit sans restriction d'IP, le port est ouvert au public et mérite d'être revu.

Article rédigé le 16/09/2026 par l'équipe Websource à partir des sources citées ci-dessus, puis relu avant publication. Une information vous semble inexacte ou datée ? Signalez-le nous, nous corrigeons.