mysqli_real_connect(): (HY000/2002): No such file or directory
PhpMyAdmin-Fehler unter MacOS. Ich möchte eine Antwort Ich habe wirklich keine Ahnung, was ich tun muss, um dies zu lösen.
Antworten:
Ändern Sie localhost in /etc/phpmyadmin/config.inc.php in 127.0.0.1
$cfg['Servers'][$i]['host'] = '127.0.0.1';
Der Grund dafür ist, dass pma versucht, eine Verbindung zum mysql.socket herzustellen, wenn Sie localhost verwenden. Wenn Sie 127.0.0.1 verwenden, stellt PMA eine TCP-Verbindung her, die funktionieren sollte.
localhost
.
localhost
Sie MySQL so konfigurieren, dass anstelle von TCP / IP ein Socket abgehört wird. Ich würde das immer empfehlen, wenn sich Ihre Datenbank auf demselben Computer befindet.
Ich versuche das schon mal
cd /opt/lampp/phpmyadmin
Dann
gedit config.inc.php
Finde das
$cfg['Servers'][$i]['host'] =
Wenn es etwas gibt, localhost
ändern Sie es auf127.0.0.1
Hinweis: Wenn '//' vorhanden ist, entfernen Sie // vorher
$cfg['Servers'][$i]['host']
Ich habe noch einmal nachgesehen http://localhost/phpmyadmin/
Mysqli sagte:
"phpMyAdmin hat versucht, eine Verbindung zum MySQL-Server herzustellen, und der Server hat die Verbindung abgelehnt. Sie sollten den Host, den Benutzernamen und das Kennwort in Ihrer Konfiguration überprüfen und sicherstellen, dass sie den vom Administrator des MySQL-Servers angegebenen Informationen entsprechen."
Ich öffne wieder config.inc.php
und ich habe gefunden
$cfg['Servers'][$i]['password'] =
Füllen Sie das Passwort mit Ihrem Passwort
Es hat bei mir funktioniert. Es kann auch für Sie funktionieren.
Lokalisieren config.sample.inc.php
Veränderung
$cfg['Servers'][$i]['host'] = 'localhost';
in
$cfg['Servers'][$i]['host'] = '127.0.0.1';
Sparen.
Benennen Sie dann die Datei um und entfernen Sie das Beispiel aus dem Namen.
sudo /etc/init.d/mysql start
oder
sudo service mysqld start
und verwenden service mysql status
, um den Status zu überprüfen
sudo systemctl enable mysql
, um MySQL weiter auszuführen . Entschuldigung für die späte Antwort. Ich habe das komplett verpasst.
Ich wollte nur einige PHPUnit-Tests auf meinem Mac mit Terminal ausführen. Einige der Klassen, die ich testen wollte, mussten MySQL DB verbinden, das von PHPMyAdmin erstellt und verwaltet wurde, und die Web-App, an der ich arbeitete, funktionierte im localhost einwandfrei. Als ich diese Testfälle ausführte, wurde auf meinem Terminal der folgende Fehler angezeigt:
mysqli_connect(): (HY000/2002): No such file or directory
Mit dem Juckreiz musste ich es lösen und meinen Test ausführen. Ich suchte in einigen SO Q & A-Threads und probierte es aus. Und eine Kombination von Änderungen hat bei mir funktioniert.
config.inc.php
Datei, die sich auf PHPMyAdmin bezieht.$cfg['Servers'][$i]['host']
meistens wurde diese Zeile standardmäßig auskommentiert. Wenn ja, kommentieren Sie sie bitte aus.$cfg['Servers'][$i]['host'] = '127.0.0.1';
$host
Parameterwert in der mysqli_connect()
Methode wie folgt:$_connection = mysqli_connect(**"localhost: 3306"**, $_mysql_username, $_mysql_password, $_database);
Hinweis: Dies 3306
ist meine MySQL-Portnummer, die die Standardeinstellung ist. Sie sollten besser überprüfen, wie Ihre tatsächliche MySQL-Portnummer lautet, bevor Sie diese Schritte ausführen.
Und das ist alles. Für mich haben nur diese Schritte funktioniert und sonst nichts. Ich habe meine Unit-Tests ausgeführt und es funktioniert einwandfrei. Die DB-Daten wurden gemäß den Tests ebenfalls ordnungsgemäß aktualisiert.
Der nächste Grund, den ich hätte finden können, ist, dass es funktioniert, da die mysqli_connect
Methode manchmal einen funktionierenden Socket (IP-Adresse des DB-Hosts zusammen mit der Portnummer) der Datenbank erfordert. Wenn Sie also die $cfg['Servers'][$i]['host'] = '127.0.0.1';
Zeile auskommentiert oder 'localhost' als Wert festgelegt haben, wird die Portnummer ignoriert. Wenn Sie jedoch einen Socket verwenden möchten, müssen Sie '127.0.0.1' oder den tatsächlichen Hostnamen verwenden. (Für mich scheint es unabhängig von der Standardportnummer zu sein, die wir wirklich haben, wir müssen die obigen Schritte ausführen .) Lesen Sie den folgenden Link von PHPMyAdmin für weitere Details.
Hoffe, das könnte jemand anderem da draußen helfen.
Prost!
Ich habe das Problem heute mit den folgenden Schritten behoben:
Wenn config.inc.php nicht im Verzeichnis phpMyadmin vorhanden ist, kopieren Sie config.sample.inc.php nach config.inc.php.
Socket hinzufügen zu /* Server parameters */
$cfg['Servers'][$i]['socket'] = '/tmp/mysql.sock';
Speichern Sie die Datei und greifen Sie über die URL auf phpmyadmin zu.
Wenn Sie MySQL 8.0.12 verwenden, sollten Sie die Legacy-Passwortverschlüsselung verwenden, da die starke Verschlüsselung vom PHP-Client nicht unterstützt wird.
Stellen Sie zunächst sicher, dass der MySQL-Dienst ausgeführt wird:
ps elf|grep mysql
Sie sehen eine Ausgabe wie diese, wenn sie ausgeführt wird:
4 S root 9642 1 0 80 0 - 2859 do_wai 23:08 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/tomcat-machine.local.pid
4 S mysql 9716 9642 0 80 0 - 200986 poll_s 23:08 pts/0 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/tomcat-machine.local.err --pid-file=/var/lib/mysql/tomcat-machine.local.pid
Ändern Sie dann localhost in config.inc.php in 127.0.0.1
$cfg['Servers'][$i]['host'] = '127.0.0.1';
Das Standardkennwort für den Benutzer "root" ist leer. Geben Sie nichts für das Kennwort ein
Wenn kein leeres Passwort zulässig ist, müssen Sie die Datei config.inc.php erneut bearbeiten und Folgendes ändern:
$cfg['Servers'][$i]['AllowNoPassword'] = true;
Das Problem ist eine Kombination aus Konfigurationseinstellungen und nicht ausgeführtem MySQL. Dies hat mir geholfen, diesen Fehler zu beheben.
Ich war mit diesem Problem unter CentOS konfrontiert .
Zuerst versuche ich das
sudo service mysql restart
Dann wird ein Fehler angezeigt
Redirecting to /bin/systemctl restart mysql.service
Failed to restart mysql.service: Unit not found.
Dann fand ich diese
Befehl dies, um mein Problem zu lösen
systemctl start mariadb.service
Wenn Ihre Website einwandfrei lief und jetzt unerwarteter FEHLER :(HY000/2002): No such file or directory
Dann sollten Sie KEINE Konfigurationsdatei ÄNDERN!
Überprüfen Sie zuerst die Datei error.log des Servers. Nginx befindet sich dort:
/var/log/nginx/error.log
Oder für Apache versuchen:
/var/log/apache2/error_log
In meinem Fall konnte ich PHP Fatal error: OUT OF MEMORY in error.log für nginx sehen.
Die Lösung: Fügen Sie dem Server mehr RAM hinzu.
Ich habe zuerst versucht, den Webserver neu zu starten, bevor ich RAM aktualisiert / hinzugefügt habe. Dann wurde ich losERROR (HY000/2002) but got some ERROR 50X: Connection Error...
Zu diesem Zeitpunkt habe ich 2 GB RAM hinzugefügt, den Webserver neu gestartet und alles hat einwandfrei funktioniert!
Als der Webserver hochgefahren war, bemerkte ich, dass mehr als 200 Cron-Jobs aufgrund eines Schleifenfehlers in 1 PHP-Skript stecken blieben.
Überprüfen Sie also, welches Skript Speicher belegt.
Ich hatte das gleiche Problem. In meinem /etc/mysql/my.cnf
war kein Weg mehr zu mysqld.sock
definieren. Also habe ich eine Suche gestartet, um es zu finden: find / -type s | grep mysqld.sock
aber es konnte nicht gefunden werden. Ich habe apt install mysql-server-5.7
mysql neu installiert mit: (Bitte überprüfen Sie, bevor Sie die aktuelle SQL-Server-Version ausführen).
Dies löste mein Problem.
mysqli_connect(): (HY000/2002): No such file or directory
Ich hatte das gleiche Problem mit debian9 VM. Ich habe versucht, MySQL neu zu starten, aber es hat das Problem nicht gelöst. Danach habe ich den Arbeitsspeicher vergrößert (ich wurde reduziert) und es hat funktioniert.
Ich hatte das gleiche Problem. Ich habe CentOS 8 mit SELinux-Durchsetzung ausgeführt und den in der Frage ( mysqli_real_connect(): (HY000/2002): No such file or directory
) genannten Fehler erhalten, obwohl alle Konfigurationen korrekt behoben wurden. Ich hatte später keine Probleme mehr, nachdem ich MySQL-Verbindungen über SELinux zugelassen hatte.
Überprüfen Sie den SELinux-Status mit diesem Befehl:
sestatus
Erlauben Sie Apache, die Datenbank über SELinux zu verbinden
setsebool httpd_can_network_connect_db 1
Die -P
Option Verwenden macht die Änderung dauerhaft. Ohne diese Option würde der Boolesche Wert beim Neustart auf 0 zurückgesetzt.
setsebool -P httpd_can_network_connect_db 1
Unter Linux einfach machen
sudo systemctl stop mysql
sudo systemctl start mysql
arbeitete für mich
Wenn Sie Archlinux oder Ubuntu verwenden, geben Sie einfach die folgenden Befehle ein:
cd /opt/lampp/phpmyadmin
dann
sudo gedit config.inc.php
Wenn Sie dann auf die Datei zugreifen, suchen Sie nach den folgenden Skripten:
//$cfg['Servers'][$i]['host'] ='localhost'
Entfernen Sie '//', damit es wie unten gezeigt bleibt:
$cfg['Servers'][$i]['host'] ='localhost'
Ändern Sie dann den ' localhost ' in ' 127.0.0.1 ' und das Skript sollte sich wie folgt drehen:
$cfg['Servers'][$i]['host'] ='127.0.0.1'
Kehren Sie zu Ihrem Browser zurück und geben Sie http://127.0.0.1/phpmyadmin/ ein.
Wenn es immer noch ablehnt
Sie sollten den Host, den Benutzernamen und das Kennwort in Ihrer Konfiguration überprüfen und sicherstellen, dass sie den vom Administrator des MySQL-Servers angegebenen Informationen entsprechen.
Kehren Sie dann zu derselben Datei config.inc.php zurück, die Sie bearbeitet haben, und gehen Sie wie folgt vor:
cd /opt/lampp/phpmyadmin
dann
sudo gedit config.inc.php
Suche nach dem Skript unten
$cfg['Servers'][$i]['password'] =''
Füllen Sie das Passwort mit Ihrem Root-Passwort
$cfg['Servers'][$i]['password'] ='your_password'
Und es sollte funktionieren.
Wenn die oben genannten Lösungen nicht funktionieren, versuchen Sie, den Standardwert von 3306 auf einen anderen zu ändern (z. B. 3307).
Sie müssen nur ib_logfile0 und ib_logfile1 in ib_logfile_0 und ib_logfile_1 umbenennen. Dann wäre Ihr Problem gelöst.