2015-07-14 7 views
5

OS: Ubuntu 14.04 LTSConnect MySQL durch localhost nicht funktioniert, aber 127.0.0.1 arbeitet

php Versionskontrolle: phpbrew

PHP-Version: 5.5.10

I pinged localhost, die zu 127.0.0.1 aufgelöst.

Dies zeigt an, dass meine Host (/ etc/hosts) -Datei korrekt ist.

127.0.0.1 localhost 

Jedes Mal, wenn ich versuche, MySQL verbinden wie die ein PHP-Skript unter ihm nicht und den Fehler gibt mir funktioniert: kein solches Verzeichnis.

//connect to the database 
    mysql_connect("localhost","root","password") or die(mysql_error()); 

Allerdings, wenn ich über 127.0.0.1 verbinden funktioniert es

//connect to the database 
     mysql_connect("127.0.0.1","root","password") or die(mysql_error()); 

Zusätzlich mein phpMyAdmin funktioniert nicht, wenn Sie sich mit der „localhost“ logging hatte ich die Datei ändern 127,0 hinzuzufügen. 0.1 Option bei der Anmeldung.

Wie kann ich mit localhost eine Verbindung zur MySQL-Datenbank herstellen?

+0

** WARNUNG **: Wenn Sie nur PHP lernen, bitte, nicht lernen, die veralteten 'mysql_query' Schnittstelle. Es ist schrecklich und wird in zukünftigen Versionen von PHP entfernt. Ein moderner Ersatz wie [PDO ist nicht schwer zu erlernen] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/). Ein Leitfaden wie [PHP The Right Way] (http://www.phptherightway.com/) kann helfen, die besten Praktiken zu erklären. Seien Sie immer absolut ** sicher ** Ihre Benutzerparameter sind [richtig entflohen] (http://bobby-tables.com/php) oder Sie werden strenge [SQL-Injektionsfehler] haben (http://bobby-tables.com/). – tadman

+0

Einverstanden. Ich arbeite mit Legacy-Code und migrierte nur einen Server. – JoeCodeCreations

Antwort

1

Die Antwort auf dieses Problem war, dass in der my.cnf befindet sich innerhalb

/etc/mysql/my.cnf 

die Linie war entweder

bind-address = 127.0.0.1 

oder

bind-address = localhost 

es

gewesen sein sollte
bind-address = 0.0.0.0 

, die alle Verbindungen

+4

Neulinge beachten! Diese Antwort öffnet Ihre Seite für Angreifer. viel besser, um die Verbindung 127.0.0.1 zu setzen und autorisierte Benutzer zu verlangen, sich über ssh zu verbinden. – pgee70

+0

@ pgee70 völlig einverstanden! Wenn Sie das tun, stellen Sie sicher, dass der TCP-Port 3306 für den Zugriff von außen verboten ist! –

2

In vielen Fällen erlauben localhost ist ein Hinweis der UNIX-Socket zu verwenden, um den MySQL-Server-Prozess zu verbinden, wo 127.0.0.1 eine TCP-Verbindung zwingt. Manchmal befindet sich der UNIX-Socket an einem unerwarteten Ort oder ist einfach nicht zugänglich, was zu dem Fehler "Datei nicht gefunden" führt.

Der Socket ist normalerweise so etwas wie /tmp/mysql.sock oder könnte an einem anderen Ort sein, abhängig von Ihrer Distribution und wie viel Sie es angepasst haben.

Beachten Sie, dass der Zugriff über den UNIX-Socket, der per Definition für den Server lokal ist, und TCP von zwei verschiedenen Regeln gesteuert werden. localhost in einem GRANT bezieht sich auf UNIX-Socket. % oder ein bestimmter Host-Name bezieht sich auf Remote über TCP.

1

PHP versucht immer noch den Standard-Socket-Speicherort zu verwenden. Dieses Problem kann auftreten, wenn Sie den MariaDB/MySQL-Ordner von /var/lib/mysql an einen anderen Speicherort verschoben haben. Um das Problem zu lösen, müssen Sie den Speicherort des neuen Sockets in der Datei /etc/php.ini definieren.

mysqli.default_socket =/newDBLocation/mysql/mysql.sock 

Pass auf, je nachdem, welche Treiber Sie verwenden, können Sie die pdo_mysql.default_socket = angeben müssen!

Um Ihr aktuelles Verzeichnis des folgenden Befehl in mysql zu überprüfen:

select @@datadir; 
+0

Dies löste mein Problem, um herauszufinden, welche Socket-Datei mysql verwendet, habe ich 'mysqladmin Variablen | grep socket '-Befehl, der auf'/tmp/mysql.sock' zeigte. (OS X Sierra) – kubilay

Verwandte Themen