Ich habe `PDOException: SQLSTATE [HY000] [2002] Keine solche Datei oder kein solches Verzeichnis` bei Verwendung von drush [closed]

21

Ich habe Drush zum ersten Mal installiert (möglicherweise liegt ein Konfigurationsfehler vor) und versuche, auf die neueste Kernversion von Drupal zu aktualisieren.

Drush gibt mir diesen Fehler - ich bin auf einer OSX-Box.

dev5:clientnamedirectory my.name$ drush pm-update projects drupal-7.25
<h1>Additional uncaught exception thrown while handling exception.</h1>

<h2>Original</h2><p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in drupal_get_installed_schema_version() (line 155 of /Users/my.name/Sites/proface/includes/install.inc).</p>

<h2>Additional</h2>

<p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in system_list() (line 165 of /Users/my.name/Sites/clientnamedirectory/includes/module.inc).</p><hr />

Drush command terminated abnormally due to an unrecoverable error.
Jack Ryan
quelle
1
Haben Sie diese Schritte ausgeführt? Ich weiß, dass es möglicherweise nicht genau Ihr Problem ist, aber es kann helfen.
Chapabu
Welche Version von Drush verwendest du? Es gibt ein Problem, das mit Ihrem
F1234k
Ich benutze die Version drush-7.x-4.5 und Drupal 7.9
FLY
fügte die Schritte hinzu, die ich zu meiner Frage befolgte. Nähte wie ähnliche Nähte schlagen Sie @Chapabu
FLY
1
Sie haben ein PHP / MySQL-Verbindungsproblem (nicht mit Drupal verbunden) - stackoverflow.com/questions/2412009/…
Clive

Antworten:

42

So habe ich es auf macOS gelöst:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

Quelle: Arbeiten mit Drush on Mamp .

Jack Ryan
quelle
Bei mir suchte es in "/ tmp" nach der mysql.sock-Datei. Also musste ich dort einen Symlink zu meiner MAMP-Installation erstellen. Nur zu Ihrer Information für jeden, der darauf stößt.
Patrick
37

Versuchen Sie in Ihrer Datenbankkonfiguration in der Datei settings.php für die Drupal-Site, den Host auf 127.0.0.1 anstelle von localhost zu ändern.

Ersetzen Sie den Standard: 'host' => 'localhost',

mit: 'host' => '127.0.0.1',

Ich hatte diesen Fehler unter OS X XAMPP, aber die Lösung sollte auch hier zutreffen. Wie Clive bereits erwähnte, handelt es sich um ein MySQL-Verbindungsproblem. Dieser Beitrag befasst sich mehr mit dem zugrunde liegenden Problem.

DarkCody
quelle
Ordentliche und einfache Lösung. Es funktioniert zwar auf Site-Basis, aber es hat hier den Trick gemacht.
Ignacio Segura Postigo
Die populärere Antwort funktioniert bei mir nicht (ich benutze MAMP Pro), aber diese tut es. Vielen Dank!
Kelley Curry
1
Nein! Dies könnte dazu führen, dass Drush funktioniert ... aber anschließend
schlägt
11

Erläuterung

Der PDOException - Fehler 2002 bedeutet, dass Ihre Drush keine Verbindung zum lokalen MySQL - Datenbankserver über die Socket - Datei (z. B. /tmp/mysql.sock) herstellen kann, wie in Ihrem konfiguriert php.ini.

Dies hat eigentlich nicht viel mit sich selbst zu drushtun, es ist Ihre PHP-Konfiguration und dieser Fehler kann reproduziert werden durch:

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

Fix

Wenn Ihr MySQL richtig funktioniert, stellen Sie sicher, dass diese beiden Dateien:

  1. mysql_config --socket

    oder: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

    oder: php -r 'phpinfo();' | grep -w default_socket

Matching und zeigt auf die gleiche Datei und beide existieren.

Wenn nicht, überprüfen Sie, welche richtig ist, indem Sie:

mysql --socket=/path/to/mysql.sock

Beheben Sie das Problem mit einer der folgenden Lösungen:

  • Stellen Sie den symbolischen Link so ein, dass er auf den funktionierenden mysql.sockUnix-Socket verweist (für MAMP, siehe Antwort von Andrew ).

    • Wenn Sie beispielsweise MAMP verwenden, können Sie einen symbolischen Link zum Standardspeicherort erstellen:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • richtiger Weg von dir pdo_mysql.default_socket, mysql.default_socketoder mysqli.default_socketin deinemphp.ini

  • geben unix_socketSie settings.phpin Ihrer $databasesVariablen an, z

    $databases['default']['default'] = array(
      // ...
      'unix_socket' => '/var/mysql/mysql.sock',

Fehlerbehebung

Andere Randfälle könnten sein:

  • falsche Berechtigungen (zB für die übergeordneten Ordner),
  • du bist nicht mehr im Raum,
  • Sie haben mehrere PHP-Versionen, prüfen Sie, welche genau Sie verwenden und welche Konfiguration Sie ändern,
  • Debuggen mit XDebug:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • oder setzen Sie xdebug.show_exception_trace=1in Ihremxdebug.ini
  • Debuggen: unter OS X mit sudo dtruss -fn mysqld, unter Linux mitstrace
  • Siehe auch: MySQL-Verbindung funktioniert nicht: 2002 Keine solche Datei oder Verzeichnis bei SO
Kenorb
quelle
6

Ich benutze MAMP Pro und hatte das gleiche Problem. Der einfachste Weg, dies zu beheben, bestand darin, die folgende Zeile zu Ihrem $ database-Array in der settings.php-Datei hinzuzufügen.

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

In vollem Umfang sollte es so aussehen:

$databases = array (
    'default' =>
     array (
        'default' =>
        array (
            'database' => 'your_database_name',
            'username' => 'username',
            'password' => 'password',
            'host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
            'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        ),
    ),
);

Der genaue Fehler, den ich bekommen habe, sah so aus:

Zusätzliche nicht erfasste Ausnahme, die während der Behandlung der Ausnahme ausgelöst wird.

Original

PDOException: SQLSTATE [HY000] [2002] Keine solche Datei oder kein solches Verzeichnis in drupal_is_denied () (Zeile 2193 von ...

Zusätzlich

PDOException: SQLSTATE [HY000] [2002] Keine solche Datei oder kein solches Verzeichnis in _registry_check_code () (Zeile 3477 von ...


Der Drush-Befehl wurde aufgrund eines nicht behebbaren Fehlers abnormal beendet.

digitalblake
quelle
2
Dies war die schnellste und einfachste Lösung für mich mit MAMP
ant.
3

Ich habe dies mit den folgenden Schritten gelöst, ähnlich den vorherigen Antworten, aber nicht mit denselben.

Füge einen Symlink hinzu:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

Finden Sie die verwendete php.ini:

php -i | grep php.ini

Fügen Sie die folgenden Einstellungen zu php.ini hinzu:

pdo_mysql.default_socket= /var/mysql/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock
Ryrye
quelle
1

Dies liegt an einem Konfigurationsfehler in Ihren PHP / SQL-Konfigurationen. Irgendwo ist der Socket, den Ihr Webserver und die Befehlszeile verwenden, anders konfiguriert. Ich empfehle, Ihre MySQL-Konfiguration zu überprüfen, um festzustellen, welcher Unix-Socket verwendet wird, und dann sicherzustellen, dass in allen php.ini-Konfigurationen und -Kompilierungen derselbe Wert verwendet wird.

Wenn Sie die Konfiguration nicht reparieren können, sollten die folgenden Schritte funktionieren:

  1. Holen Sie sich die Entwicklungsversion von Drush 5.x (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) und installieren Sie diese stattdessen. Dies könnte andere Probleme verursachen, aber insgesamt ist es ziemlich stabil.
  2. Entfernen Sie in Ihrer Drupal-Site settings.php die Host- und Port-Einstellungen für die Datenbankverbindung und fügen Sie ein 'unix_socket' => '/path/to/mysql.sock' hinzu, um sie zu ersetzen.

Wenn Ihnen das alles zu kompliziert erscheint, können Sie alternativ den Host in setting.php von localhost auf 127.0.0.1 ändern. Dadurch wird die Site langsamer, aber für eine Entwicklungssite ist sie möglicherweise nicht erkennbar oder wichtig. Für einen Produktionsstandort möchten Sie den Unix-Socket verwenden und sollten die Konfiguration sortieren.

Kjartan
quelle
Das macht es wirklich. Ich habe es unzählige Male getestet.
Asiby
1

Einen einfacheren / alternativen Weg gefunden, um drush auf einem Mac zu installieren:

Installieren Sie Homebrew, indem Sie es in ein eigenständiges Terminal einfügen

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

Fügen Sie dann Drush hinzu, indem Sie Folgendes vom selben Terminal ausführen

brew install drush

Der Drush-Status läuft jetzt einwandfrei.

FLIEGE
quelle
1

Wenn Sie mit der MySQL.com-Installation von MySQL arbeiten, müssen Sie PHP nur auf den richtigen Speicherort für die .sockDatei verweisen .

php.iniErgänzen / ändern Sie diese beiden Zeilen in Ihrer :

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

Verwenden Sie diese Option, um den Speicherort Ihrer php.ini zu ermitteln (möglicherweise ist sie noch nicht vorhanden)

php -i | grep php.ini

Wenn die php.iniDatei dort noch nicht vorhanden ist, erstellen Sie sie.

Chris Burgess
quelle
0

Stimmen Sie mit anderen Antworten überein, dass Drupal den MySQL-Socket nicht finden kann. Die anderen Antworten halfen mir, waren jedoch für die Installation mit dem installierten offiziellen Oracle Mysql-Dienst unvollständig. Der Standardspeicherort der Datei mysql.sock. Hier ist eine Zusammenfassung meiner empfohlenen Antworten, abhängig von Ihrem Anwendungsfall:

Wenn Sie mysql verwenden, wie es im offiziellen MAMP-Paket enthalten ist, verwenden Sie die Antwort von @Andrew Alexander:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

Für das offizielle Oracle MYSQL:

sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
bdombro
quelle
0

Bei einem MAMP 4-Setup wurde die Option "Diese Version in der Befehlszeile verfügbar machen" aktiviert.

MAMP-Konfiguration

Shaun Dychko
quelle
0

Ich habe die folgende Nachricht im Terminal erhalten:

(MAMP PRO + PHP 7)

Blockquote Drush-Befehl wurde aufgrund eines nicht behebbaren Fehlers abnormal beendet.
[Fehler] PDOException: SQLSTATE [HY000] [2002] Keine solche Datei oder kein solches Verzeichnis in Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService () Blockquote

Ich habe das Problem mit Hilfe dieser Anleitung gelöst

lesley n.
quelle
0

Ich habe vergessen, dass mein lokales Mysql auf einer eindeutigen Portnummer ausgeführt wird, und war verwirrt, warum ich dies erhalten habe, bis ich meine Konfiguration auf einer anderen lokalen Site überprüft habe.

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
powpow12
quelle