it-swarm.com.de

Warnung: mysql_connect (): [2002] Keine solche Datei oder kein solches Verzeichnis (versucht, eine Verbindung über Unix: ///tmp/mysql.sock herzustellen) in

Ich versuche, mit dem Terminal auf meinem Apple (mit PHP) eine Verbindung zu meiner MySQL-Datenbank herzustellen.

Gestern hat es gut geklappt, und jetzt bekomme ich plötzlich den Fehler im Titel.

Das Skript funktioniert, wenn ich es mit meinem Browser ausführe (ich habe XAMPP installiert), aber Terminal weigert sich, eine Verbindung zur Datenbank herzustellen.

Hier ist die Datei, die ich einbinde, um eine Verbindung herzustellen (das Skript funktioniert, wenn ich dies nicht einbinde, aber dann keine Verbindung zur Datenbank herstellt):

<?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("FNB1C_data") or die(mysql_error());
?>

Das sollte funktionieren, da es mit meinem Browser funktioniert.

Der Befehl, den ich am Terminal verwende, lautet php scriptname.php.

239
Nr 28

Aus irgendeinem Grund stimmt mysql unter OS X nicht mit den Positionen der erforderlichen Socket-Datei überein, aber zum Glück ist die Lösung so einfach wie das Einrichten einer symbolischen Verknüpfung.

Möglicherweise haben Sie einen Socket (der als Datei mit der Länge 0 angezeigt wird) als /tmp/mysql.sock oder /var/mysql/mysql.sock, aber eine oder mehrere Apps suchen am anderen Ort danach. Finden Sie es mit diesem Befehl heraus:

ls -l /tmp/mysql.sock /var/mysql/mysql.sock

Anstatt den Socket zu verschieben, Konfigurationsdateien zu bearbeiten und die bearbeiteten Dateien lokal und von Servern fernzuhalten, auf denen die Pfade korrekt sind, erstellen Sie einfach eine symbolische Verknüpfung, damit Ihr Mac den erforderlichen Socket auch dann findet, wenn er an der falschen Stelle gesucht wird !

Wenn Sie haben /tmp/mysql.sock aber nein /var/mysql/mysql.sock dann...

cd /var 
Sudo mkdir mysql
Sudo chmod 755 mysql
cd mysql
Sudo ln -s /tmp/mysql.sock mysql.sock

Wenn Sie haben /var/mysql/mysql.sock aber nein /tmp/mysql.sock dann...

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock

Sie benötigen Berechtigungen, um das Verzeichnis und den Link zu erstellen. Stellen Sie daher den obigen Befehlen bei Bedarf Sudo voran.

412
Brian Lowe

Ich hatte auch diesen Fehler, konnte ihn aber nur durch den Vorschlag beheben hier .

Verwenden Sie zum Zusammenfassen:

127.0.0.1

Anstatt von:

localhost

Der Grund ist, dass "localhost" ein spezieller Name für den MySQL-Treiber ist, der die Verbindung mit MySQL über den UNIX-Socket anstelle des Sockets a TCP= verwendet.

360
luismreis

Ich hatte das gleiche Problem und so habe ich es behoben:

Ich hatte das und es hat nicht funktioniert:

$con = mysql_connect('localhost', 'root', '1234');

Ich habe das gemacht und es hat funktioniert:

$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');

Anstatt den MySQL-Server zu verwenden, habe ich mich direkt mit dem Unix-Socket verbunden. Hat für mich gearbeitet.

24
Caio

Der MySQL-Socket befindet sich im Allgemeinen in /tmp/mysql.sock oder /var/mysql/mysql.sock, aber wahrscheinlich PHP sieht an der falschen Stelle aus.

  1. Überprüfen Sie, wo sich Ihre Steckdose befindet mit:

     Sudo /usr/libexec/locate.updatedb
    
  2. Wenn das Update beendet ist:

     locate mysql.sock
    
  3. Dann suchen Sie Ihre php.ini:

     php -i | grep php.ini
    

    dies wird so etwas ausgeben wie:

     Configuration File (php.ini) Path => /opt/local/etc/php54
     Loaded Configuration File => /opt/local/etc/php54/php.ini
    
  4. Bearbeiten Sie Ihre php.ini

     Sudo vim /opt/local/etc/php54/php.ini
    
  5. Ändern Sie die Zeilen:

     pdo_mysql.default_socket=/tmp/mysql.sock
     mysql.default_socket=/tmp/mysql.sock
     mysqli.default_socket = /tmp/mysql.sock
    

    dabei ist /tmp/mysql.sock der Pfad zu Ihrem Socket.

  6. Speichern Sie Ihre Änderungen und beenden Sie ESC + SHIFT: x

  7. Starten Sie Apache neu

     Sudo apachectl stop
     Sudo apachectl start
    
21
noun

Ich bin auf XAMPP unter Mac OS X und Brian Lowes obige Lösung funktionierte mit einer geringfügigen Modifikation.

Die Datei mysql.sock befindet sich tatsächlich im Ordner "/ Applications/xampp/xamppfiles/var/mysql /". Also musste es sowohl in/tmp als auch in/var/mysql verlinkt werden. Ich habe nicht überprüft, welches von der PHP Kommandozeile verwendet wird, aber dies hat das Problem behoben, also bin ich glücklich :-)

Sudo su
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock
mkdir /var/mysql
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock
11
Nirav Mehta

Mac OS X EL Capitan + MAMP Pro Führen Sie dies aus

cd /var
Sudo mkdir mysql
Sudo chmod 755 mysql
cd mysql
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

Dann mach das

cd /tmp
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

Hoffe das spart dir etwas Zeit.

10
Jsonras

Der Grund ist, dass PHP den korrekten Pfad von mysql.sock Nicht finden kann.

Bitte stellen Sie sicher, dass Ihr MySQL zuerst ausgeführt wird.

Vergewissern Sie sich dann, dass sich der Pfad mysql.sock Befindet, zum Beispiel /tmp/mysql.sock.

füge dann diesen Pfad zu php.ini hinzu:

  • mysql.default_socket = /tmp/mysql.sock
  • mysqli.default_socket = /tmp/mysql.sock
  • pdo_mysql.default_socket = /tmp/mysql.sock

Starten Sie schließlich Apache neu.

6
brucenan

Wenn Sie auf folgendes Problem stoßen:

PHP-Fehler "Warnung: mysql_connect () http: //function.mysql-connect : 2002 Keine solche Datei oder kein solches Verzeichnis (Versuch, eine Verbindung über Unix herzustellen: ///tmp/mysql.sock)"

Setze "mysql.default_socket" in deinem /etc/php.ini bis

 "mysql.default_socket = /var/mysql/mysql.sock". 

Starten Sie dann den Webdienst im Serveradministrator neu

6
cristian

Beheben Sie den drohenden Socket-Fehler aus dem Jahr 2002, bei dem MySQL den Socket platziert und OSX denkt, dass er sein sollte. MySQL legt ihn in/tmp ab und OSX sucht ihn in/var/mysql/Serverkommunikation.

Sudo mkdir /var/mysql

und dann

Sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

quelle: http://coolestguidesontheplanet.com/get-Apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/

2
kingus

ich hatte das gleiche Problem

[PDOException] SQLSTATE [HY000] [2002] Keine solche Datei oder kein solches Verzeichnis

[ErrorException] Warnung: PDO :: __ construct (): [2002] Keine solche Datei oder kein solches Verzeichnis (versucht, eine Verbindung über Unix herzustellen: ///var/mysql/mysql.sock) in… htdocs /Symfony/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php

Die Lösung besteht also darin, einen Symlink zur SOCK-Datei zu erstellen, um das Problem zu beheben. Führen Sie die folgenden Schritte aus, um das Problem zu beheben:

$ Sudo mkdir/private/var/mysql/

$ Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /private/var/mysql/mysql.sock

quelle: http://www.reecefowell.com/2012/07/21/symfony2-cli-does-not-connect-to-mysql-while-browser-works-fine/

1

Eine andere Lösung besteht darin, den Socket-Speicherort in der Konfigurationsdatei php.ini wie folgt zu korrigieren:

pdo_mysql.default_socket=/tmp/mysql.sock

Natürlich funktioniert der Symlink auch, es ist also eine Frage der Präferenz, welchen Sie ändern.

1

Wenn Sie php53-mysql über den Port installieren, wird die folgende Meldung zurückgegeben, die die Lösung für dieses Problem darstellt:

To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.

For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock
1
Sheric

Ich habe die gleichen Fehler bekommen. Mysql lief als eigenständige Anwendung, bevor ich phpMyAdmin startete.

Ich habe gerade mysql gestoppt. Dann Sudo/Applications/XAMPP/xamppfiles/xampp Sudo/Applications/XAMPP/xamppfiles/xampp starten

Es hat gut funktioniert

0
minhas23

Da Sie möglicherweise MAMP verwenden, ändern Sie entweder Ihren Port auf den Standardwert 3306 oder verwenden Sie 127.0.0.1 in der database.php

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',// leave it for port 3306
    'username' => 'yourUserhere',
    'password' => 'yourPassword',
    'database' => 'yourDatabase',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

Oder mit den Standardeinstellungen:

$db['default'] = array(
        'dsn'   => '',
        'hostname' => '127.0.0.1:8889',// leave it for port 8889
        'username' => 'yourUserhere',
        'password' => 'yourPassword',
        'database' => 'yourDatabase',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
0
Cyber

Ich hatte gerade dieses Problem, aber es erschien nur beim Laden bestimmter Seiten (andere Seiten funktionierten einwandfrei). Es stellte sich heraus, dass ich MySQL anrief, nachdem ich die Verbindung mit mysql_close() geschlossen hatte. Also, wie @brucenan sagte: stellen Sie sicher, dass MySQL läuft, wenn Sie es aufrufen.

0
RoberRM

Sie können es tun, indem Sie einfach das MAMP-PHP auf Apple Terminal:

alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'

Beispiel: > phpmamp - v

Jetzt können Sie etwas ausführen wie: > phpmamp scriptname.php

Hinweis: Dies gilt nur für die aktuelle Terminalsitzung.

0
Naresh Chennuri

Der mySQL-Client versucht standardmäßig, eine Verbindung über eine lokale Datei namens Socket herzustellen, anstatt eine Verbindung mit der Loopback-Adresse (127.0.0.1) für localhost herzustellen.

Der Standardspeicherort dieser Socket-Datei ist, zumindest unter OSX, /tmp/mysql.sock.

SCHNELLE, WENIGER ELEGANTE LÖSUNG

Erstellen Sie einen Symlink, um das Betriebssystem dazu zu bringen, den richtigen Socket zu finden.

ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp

RICHTIGE LÖSUNG

Ändern Sie den Socket-Pfad, der in der Datei startMysql.sh In /Applications/MAMP/bin Definiert ist.

0
ashark