Tutorial: Fehler "connect ECONNREFUSED 127.0.0.1:3306" in Node.js & MySQL beheben
Hier ist ein ausführliches Tutorial, wie du den Fehler „Error: connect ECONNREFUSED 127.0.0.1:3306“ in einer Node.js-Umgebung mit MySQL behebst.
Dieser Fehler tritt auf, wenn deine Node.js-Anwendung versucht, eine Verbindung zum MySQL-Datenbankserver aufzubauen, dieser aber unter der angegebenen Adresse und dem Port nicht erreichbar ist. Er bedeutet wörtlich: „Verbindung abgelehnt“.
Hier sind die häufigsten Ursachen und die passenden Lösungen.
Schritt 1: Prüfen, ob der MySQL-Server läuft
Die häufigste Ursache ist, dass der MySQL-Dienst schlichtweg nicht gestartet wurde.
- XAMPP/WAMP: Öffne das Control Panel und stelle sicher, dass das Modul „MySQL“ grün hinterlegt ist (Status: Running).
- Windows: Öffne den Task-Manager -> Dienste -> Suche nach
MySQLoderMySQL80-> Rechtsklick -> Starten. - Linux (Ubuntu/Debian): Gib im Terminal ein:
sudo systemctl status mysql # Falls er nicht läuft: sudo systemctl start mysql - macOS (Homebrew):
brew services list # Falls er nicht läuft: brew services start mysql
Schritt 2: Host-Adresse prüfen (127.0.0.1 vs. localhost)
In Node.js (insbesondere ab Version 17) gibt es oft Probleme bei der Auflösung von localhost. Node.js versucht manchmal, sich über IPv6 (::1) zu verbinden, während MySQL nur auf IPv4 (127.0.0.1) lauscht.
Lösung:
Ändere in deinem Node.js-Code die Verbindungsdaten von localhost zu 127.0.0.1.
Falsch/Problematisch:
const connection = mysql.createConnection({
host: 'localhost', // Kann zu Problemen führen
user: 'root',
password: 'dein_passwort',
database: 'test_db'
});
Richtig:
const connection = mysql.createConnection({
host: '127.0.0.1', // Explizite IPv4 Adresse
port: 3306,
user: 'root',
password: 'dein_passwort',
database: 'test_db'
});
Schritt 3: Den Port überprüfen
Standardmäßig nutzt MySQL den Port 3306. Wenn du jedoch ein Programm wie XAMPP nutzt und dort eine Fehlermeldung bezüglich belegter Ports erhalten hast, hast du den Port vielleicht auf 3307 oder ähnlich geändert.
Lösung:
Prüfe in deiner MySQL-Konfigurationsdatei (my.ini oder my.cnf), welcher Port unter port= eingetragen ist. Stelle sicher, dass dieser Port auch in deinem Node.js-Code verwendet wird.
Schritt 4: Firewall und Berechtigungen
Manchmal blockiert eine Firewall den internen Port 3306.
- Firewall: Stelle sicher, dass Port 3306 für lokale Verbindungen freigegeben ist.
- Bind-Address: In der MySQL-Konfiguration (
my.cnf) sollte die Zeilebind-addressauf127.0.0.1oder0.0.0.0stehen. Wenn dort eine andere IP steht, werden Verbindungen von „außen“ (auch von deinem Node-Script) abgelehnt.
Schritt 5: Beispiel für eine saubere Verbindung
Hier ist ein robustes Beispiel für den Verbindungsaufbau mit Fehlerbehandlung:
const mysql = require('mysql2'); // Empfohlen: mysql2 verwenden
const connection = mysql.createConnection({
host: '127.0.0.1',
port: 3306,
user: 'root',
password: '', // Dein Passwort hier eintragen
database: 'meine_datenbank'
});
connection.connect((err) => {
if (err) {
if (err.code === 'ECONNREFUSED') {
console.error('Fehler: Der MySQL-Server läuft nicht oder der Port ist falsch.');
} else {
console.error('Verbindungsfehler: ' + err.stack);
}
return;
}
console.log('Erfolgreich mit MySQL verbunden als ID ' + connection.threadId);
});
Zusammenfassung der Checkliste:
- Läuft MySQL? (XAMPP/Dienste prüfen)
- Stimmt die IP? Nutze
127.0.0.1stattlocalhost. - Stimmt der Port? Meist
3306, bei XAMPP manchmal3307. - Nutzerdaten korrekt? Prüfe Benutzername und Passwort.
- Bibliothek aktuell? Nutze vorzugsweise das Paket
mysql2, da es besser mit aktuellen Node.js-Versionen kompatibel ist.