Tu cliques sur Start à côté de MySQL dans XAMPP, le bouton passe en orange deux secondes, puis revient au vert. MySQL, lui, reste rouge. Et phpMyAdmin te crache un mysqli_real_connect(): (HY000/2002) en pleine face. Spoiler : dans 9 cas sur 10, XAMPP MySQL ne démarre pas pour une raison débile, pas pour un serveur mort. Le vrai piège, c’est de balancer des solutions au hasard sans lire le log.
On part du principe que tu es sous Windows, parce que c’est là que le module MySQL plante le plus. Et on va dérouler les causes réelles, dans l’ordre où elles se présentent. Pas de blabla, juste ce qui marche.
Le fichier mysql_error.log : commence TOUJOURS par ça
Dans le panneau de contrôle XAMPP, clique sur Logs à droite du module MySQL. Tu tombes direct sur mysql_error.log. Tant que XAMPP MySQL ne démarre pas et que tu n’as pas lu ces 20 dernières lignes, tu travailles à l’aveugle. C’est l’étape que tout le monde saute et qui te fait perdre une heure pour rien.
Tu y verras des messages du genre [ERROR] InnoDB: File .ibdata1: ‘read’ returned OS error 71 ou [ERROR] Do you already have another mysqld server running on port: 3306 ?. Ces deux phrases pointent vers deux problèmes totalement différents. Un ne se règle pas comme l’autre, et confondre les deux, c’est le meilleur moyen de tout casser.
Cause n°1 : un autre serveur squatte le port 3306
C’est la raison numéro un quand MySQL ne démarre pas sous XAMPP. Tu as probablement installé MySQL Workbench, MariaDB, ou un MySQL fourni par un autre logiciel (WAMP, EasyPHP, un projet Node), et son service Windows tourne en arrière-plan sur le fameux port 3306.
Vérifie ça en cinq secondes. Ouvre un terminal (cmd) et tape :
netstat -ano | findstr :3306
Si tu vois une ligne avec LISTENING et un PID à la fin, tu as ton coupable. Récupère ce PID et tape taskkill /PID xxxx /F en remplaçant xxxx par le numéro. Relance MySQL dans XAMPP.
Autre cas classique : le service MySQL80 installé par Oracle. Tape services.msc dans Démarrer, cherche MySQL80, mets-le en Manuel au lieu d’Automatique, puis arrête-le. Redémarre XAMPP, et là ça passe. Cette manip règle le problème de port 3306 occupé une bonne fois pour toutes.
Cause n°2 : changer le port MySQL dans my.ini (solution béton)
Si tu as besoin de garder ton MySQL80 actif, ne te bats pas. Change simplement le port côté XAMPP. Ça se passe dans ce fichier :
C:xamppmysqlbinmy.ini
Ouvre-le avec Notepad++ ou VS Code, trouve la ligne port = 3306 et remplace-la par port = 3307. Attention : il y a deux occurrences dans le fichier, une sous la section [client] et une sous [mysqld]. Change les deux, sinon MySQL lira un port et le client en cherchera un autre.
Enregistre, ferme XAMPP entièrement, relance-le. Si MySQL démarre en vert mais que phpMyAdmin affiche une erreur, va dans C:xamppphpMyAdminconfig.inc.php et modifie la ligne $cfg[‘Servers’][$i][‘port’] = ‘3307’;. Là, tout rentre dans l’ordre. C’est la solution la plus propre quand XAMPP MySQL ne démarre pas à cause d’un conflit de port.
Cause n°3 : données InnoDB corrompues (le grand classique après un crash)
Ton PC s’est éteint brutalement, ou tu as coupé XAMPP à la sauvage un jour sur deux. MySQL ne démarre plus, et le log parle de ibdata1, ib_logfile ou aria_log_control. Ça veut dire que les fichiers moteur InnoDB sont incohérents.
La technique qui fonctionne : coupe XAMPP, va dans C:xamppmysqldata, et renomme le dossier data en data_old (surtout ne le supprime pas, tu y as peut-être tes bases). Ensuite, copie le dossier C:xamppmysqlbackup et colle-le dans C:xamppmysql, en le renommant data. Relance XAMPP. MySQL redémarre sur une base propre. Tu perds tes tables, mais tu récupères un serveur fonctionnel pour reconstruire.
Si tu veux tenter de sauver tes données, avant de faire tout ça, reste dans ta copie data_old et regarde si tu peux récupérer tes dossiers de bases (chaque base = un dossier portant son nom, avec des fichiers .frm, .ibd ou .idb). C’est jouable si la corruption ne touche que les fichiers système InnoDB, pas tes tables.
Cause n°4 : pare-feu, antivirus et droits d’accès
Ton antivirus (Avast, Kaspersky, Windows Defender en mode renforcé) peut bloquer mysqld.exe en écriture sur le dossier data. Résultat : MySQL ne démarre pas sous XAMPP sans afficher d’erreur claire côté interface. C’est vicieux, parce que tu crois que le problème vient de MySQL alors qu’il vient de Windows.
La fix : ajoute le dossier C:xampp en exclusion dans les réglages de ton antivirus. Côté pare-feu Windows, autorise les connexions entrantes pour le port utilisé (3306 ou 3307) sur le réseau privé au minimum. Sans ça, même un MySQL sain ne répondra pas depuis un autre appareil.
Cause n°5 : lancer MySQL en mode console pour voir la vraie erreur
XAMPP masque souvent le message exact. Ouvre un cmd, tape :
C:xamppmysqlbinmysqld.exe –console
Là, l’erreur s’affiche en direct, en clair. C’est comme ça que tu distingues un conflit de port d’une corruption de table ou d’un chemin my.ini invalide. Cette commande seule résout le diagnostic 90% du temps.
Un détail que peu de tutos disent : XAMPP embarque MariaDB et non le vrai MySQL d’Oracle, même si le dossier s’appelle “mysql”. Donc oublie les procédures officielles Oracle, certaines commandes ne s’appliquent pas. Reste sur la doc XAMPP et sur ce que te dit ton log. C’est con, mais ça évite de partir sur des chemins qui ne mènent nulle part.
Cause n°6 : le dossier data ou my.ini mal placé après une mise à jour
Autre cas qui revient souvent : tu as déplacé XAMPP d’un disque à un autre, ou tu l’as réinstallé par-dessus l’ancien. Le chemin datadir dans my.ini pointe encore vers l’ancien emplacement, et MySQL ne démarre pas sous XAMPP en te sortant une erreur du style Can’t find file: ‘.mysqlplugin.frm’.
Ouvre my.ini, cherche la ligne datadir= et vérifie qu’elle pointe bien vers C:/xampp/mysql/data (avec des slashs, pas des antislashs). Si tu as déplacé XAMPP dans D:xampp, corrige le chemin en conséquence. Relance XAMPP. Ça paraît bête, mais c’est une cause fréquente de MySQL qui refuse de démarrer.
Cause n°7 : réinstaller proprement plutôt que s’acharner
Si tu as tout tenté dans l’ordre et que MySQL ne démarre toujours pas sous XAMPP, il reste une option : sauvegarder tes bases (copie du dossier data si tu peux encore y accéder), désinstaller XAMPP, supprimer le dossier C:xampp entièrement, puis réinstaller une version récente. C’est radical, mais parfois plus rapide que trois heures de diagnostic.
Avant de réinstaller, vérifie quand même une dernière chose : que tu n’as pas deux installations XAMPP en parallèle. Ça arrive plus souvent qu’on ne croit, et dans ce cas MySQL ne démarre pas sous XAMPP parce que deux services se marchent dessus.
Ce qu’il faut retenir, sans tourner autour du pot
Si XAMPP MySQL ne démarre pas, la séquence à suivre est toujours la même : lire mysql_error.log, vérifier le port 3306 avec netstat, tuer le processus concurrent ou changer de port, puis s’attaquer aux fichiers data uniquement si le log accuse InnoDB. Dans cet ordre, tu règles le problème en moins de dix minutes au lieu de réinstaller XAMPP pour rien.
Et la prochaine fois, arrête XAMPP proprement avec le bouton Stop plutôt que de fermer la fenêtre à la hâte. 90% des corruptions InnoDB viennent de là. Un serveur MySQL qui ne démarre pas sous XAMPP, c’est rarement une fatalité : c’est presque toujours une erreur de config ou un service qui traîne. Alors avant de paniquer, lis le log. Ça change tout.