Home > Tipps & Tricks > Datenbanken, Schnittstellen > MySQL auf Windows: Can't connect to MySQL server on 'localhost' (10048)

MySQL auf Windows: Can't connect to MySQL server on 'localhost' (10048)

Geschrieben von   admin on    Dezember 16, 2010

Wenig bekanntes Problem mit MySQL auf Windows Webservern

Da hat man nun eine PHP-Webanwendung mit MySQL-Anbindung ausgiebig getestet und lange Zeit lief die Sache auch auf dem Produktivsystem, hier einem Windows 2003-Webserver, ohne Probleme. Die Website hat wachsenden Zuspruch, was zunächst einmal erfreulich ist. Eines Tages aber gibt es plötzlich Probleme und im Fehler-Log stehen haufenweise Meldungen die darauf hinweisen, dass Datenbank-Connects fehlschlagen.

Eine mögliche Ursache, bei der ich davon ausgehe, dass sie gar nicht mal so selten auftritt, sind zwei Windows-Defaulteinstellungen für kurzlebige Verbindungen. Diese Defaulteinstellungen begrenzen einerseits die zur Verfügung stehenden Ports für kurzlebige Verbindungen und sollen andererseits dafür sorgen, dass spät eintreffende Pakete empfangen werden können, auch nachdem eine TCP/IP-Verbindung geschlossen wurde. Es ist nämlich so, dass diese Verbindungen für eine gewisse Zeitspanne "belegt" bleiben, und somit erst nach einer Weile erneut zur Verfügung stehen. Je häufiger nun MySQL-Connects über TCP/IP geöffnet und geschlossen werden, umso wahrscheinlicher wird es, dass ein erneuter/weiterer Connect fehlschlägt. Nicht nur aus diesem Grund ist es also nicht ganz unwichtig, mit MySQL-Datenbank-Connects, gerade bei Windows-Systemen, sparsam umzugehen.

Viel "Luft" gewinnt man, wenn man zwei Registry-Einstellungen anpasst. Das Verfahren ist, etwas schwer zu finden, hier im MySQL Manual beschrieben. Dort gibt es auch eine ausführlichere Beschreibung.

Named Pipes sind ab PHP 5.3.4 möglicherweise eine Lösung

Nach einigen Meldungen sollte es mit mysqlnd in PHP 5.3.x angeblich möglich sein, Named Pipes zum MySQL-Datenbank-Connect zu verwenden. Vorteil: Es ist performanter, als über TCP/IP zu gehen, und vermeidet das oben beschriebene Problem. Es setzt natürlich voraus, dass der MySQL Server auf der gleichen Maschine läuft, wie die PHP-Skripte. Es gibt nun ein paar Einstellungen in my.ini, mit denen man das bewerkstelligen können sollte, aber bis PHP 5.3.3 muss man leider noch die Finger davon lassen, denn es funktioniert schlichtweg nicht. Siehe diesen Bug Report. Für PHP 5.3.4 ist zwar eine Unterstützung für Named Pipes im Zusammenhang mit Windows angekündigt. Aber es lassen ich noch keine Quellen finden, die beschreiben, wie ein solcher Connect zu bewerkstelligen ist.

Kommentare

Kommentar schreiben



(Ihre E-Mail-Adresse wird nicht angezeigt.)


Ungültiger Sicherheitscode

Bitte klicken Sie das Bild an, um einen neuen Sicherheitscode zu laden.