Wenn Sie nur "localhost" verwenden, versucht die MySQL-Clientbibliothek, anstelle einer TCP/IP-Verbindung einen Unix-Domain-Socket für die Verbindung zu verwenden. Der Fehler sagt Ihnen, dass der Socket namens MySQL
, kann nicht verwendet werden, um die Verbindung herzustellen, wahrscheinlich weil sie nicht existiert (Fehlernummer 2).
Aus der MySQL-Dokumentation :
Unter Unix behandeln MySQL-Programme den Hostnamen localhost besonders, in einer Weise, die sich wahrscheinlich von dem unterscheidet, was Sie im Vergleich zu anderen netzwerkbasierten Programmen erwarten. Bei Verbindungen zu localhost versuchen MySQL-Programme, eine Verbindung zum lokalen Server herzustellen, indem sie eine Unix-Socket-Datei verwenden. Dies geschieht selbst dann, wenn eine --port- oder -P-Option angegeben wird, um eine Portnummer anzugeben. Um sicherzustellen, dass der Client eine TCP/IP-Verbindung zum lokalen Server herstellt, verwenden Sie --host oder -h, um einen Hostnamenswert von 127.0.0.1 oder die IP-Adresse oder den Namen des lokalen Servers anzugeben. Sie können das Verbindungsprotokoll auch explizit angeben, sogar für localhost, indem Sie die Option --protocol=TCP verwenden.
Es gibt einige Möglichkeiten, dieses Problem zu lösen.
- Sie können einfach TCP/IP anstelle des Unix-Sockets verwenden. Sie würden dies tun, indem Sie
127.0.0.1
verwenden stattlocalhost
wenn du dich verbindest. Der Unix-Socket ist jedoch möglicherweise schneller und sicherer zu verwenden. - Sie können den Socket in ändern
php.ini
:Öffnen Sie die MySQL-Konfigurationsdateimy.cnf
um herauszufinden, wo MySQL den Socket erstellt, und legen Siemysqli.default_socket
von PHP fest zu diesem Weg. Auf meinem System ist es/var/run/mysqld/mysqld.sock
. -
Konfigurieren Sie den Socket beim Öffnen der Verbindung direkt im PHP-Skript. Zum Beispiel:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')