Ho `PDOException: SQLSTATE [HY000] [2002] Nessun file o directory simili quando si usa drush [chiuso]


21

Ho installato Drush per la prima volta (quindi potrebbe trattarsi di un errore di configurazione) e sto provando ad aggiornare all'ultima versione core di Drupal.

Drush mi sta dando questo errore - Sono su una scatola OSX.

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.

1
Hai completato questi passaggi? So che potrebbe non essere esattamente il tuo problema, ma potrebbe essere d'aiuto.
Chapabu,

Quale versione di Drush stai usando? C'è un problema che sembra essere identico al tuo: drupal.org/node/832472
F1234k

Sto usando la versione drush-7.x-4.5 e drupal 7.9
FLY

aggiunto i passaggi che ho seguito alla mia domanda. Cuciture come punti simili che stai suggerendo @Chapabu
FLY

1
Hai un problema di connessione PHP / MySQL (non relativo a Drupal) - stackoverflow.com/questions/2412009/…
Clive

Risposte:


42

Ecco come l'ho risolto su macOS:

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

Fonte: lavorare con Drush su Mamp .


Per me stava cercando in "/ tmp" il file mysql.sock. Quindi ho dovuto creare un link simbolico lì dentro alla mia installazione di MAMP. Cordiali saluti per chiunque lo incontri.
Patrick

37

Nella configurazione del tuo database nel file settings.php per il sito Drupal, prova a cambiare l'host in 127.0.0.1 invece di localhost.

sostituire il valore predefinito: 'host' => 'localhost',

con: 'host' => '127.0.0.1',

Ho avuto questo errore su OS X XAMPP, ma la soluzione dovrebbe applicarsi anche qui. Come ha detto Clive, è un problema di connessione MySQL. Questo post ha di più sul problema di fondo.


Soluzione ordinata e semplice. Funziona su una base per sito, però, ma ha fatto il trucco qui.
Ignacio Segura Postigo,

La risposta più popolare non funziona per me (sto usando MAMP Pro), ma questa funziona. Grazie!
Kelley Curry,

1
No! Questo potrebbe far funzionare Drush ... ma successivamente
farà

11

Spiegazione

Il PDOException - Errore 2002 significa che il vostro Drush non può connettersi al server di database locale di MySQL attraverso il file di socket (ad esempio /tmp/mysql.sock), come configurato nella vostra php.ini.

Questo in realtà non è molto legato a drushse stesso, è la tua configurazione di PHP e quell'errore può essere riprodotto da:

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

fix

Se il tuo MySQL funziona correttamente, assicurati che questi due file:

  1. mysql_config --socket

    o: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

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

corrispondenza e punta allo stesso file ed entrambi esistono.

In caso contrario, controlla quale è corretto:

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

quindi risolvere il problema con una delle seguenti soluzioni:

  • crea il collegamento simbolico per puntare al mysql.socksocket unix funzionante (per MAMP, vedi risposta Andrew ),

    • ad esempio, se si utilizza MAMP, è possibile creare un collegamento simbolico alla posizione predefinita:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • percorso corretto della vostra pdo_mysql.default_socket, mysql.default_socketo mysqli.default_socketnella vostraphp.ini

  • specifica unix_socketnella settings.phptua $databasesvariabile, ad es

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

Risoluzione dei problemi

Altri casi limite potrebbero essere:

  • autorizzazioni errate (ad es. per le cartelle principali),
  • sei fuori dallo spazio,
  • hai più versioni di PHP, controlla quale esattamente stai usando e quale configurazione stai cambiando,
  • Debug con XDebug:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • o impostato xdebug.show_exception_trace=1nel tuoxdebug.ini
  • Debug: su OS X con sudo dtruss -fn mysqld, su Linux constrace
  • Vedi anche: Connessione MySQL non funzionante: 2002 Nessun file o directory simile su SO

6

Sto usando MAMP Pro e ho avuto lo stesso problema. Il modo più semplice che ho trovato per risolverlo è stato aggiungere la seguente riga al tuo array $ database nel file settings.php.

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

In pieno dovrebbe apparire così:

$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',
        ),
    ),
);

L'errore esatto che stavo ottenendo sembrava così:

Eccezione aggiuntiva non rilevata generata durante la gestione dell'eccezione.

Originale

PDOException: SQLSTATE [HY000] [2002] Nessun file o directory simile in drupal_is_denied () (riga 2193 di ...

addizionale

PDOException: SQLSTATE [HY000] [2002] Nessun file o directory in _registry_check_code () (riga 3477 di ...


Comando Drush terminato in modo anomalo a causa di un errore irreversibile.


2
questa è stata la soluzione più semplice e veloce per me usando MAMP
formica

3

Ho risolto questo con i seguenti passaggi, simili alle risposte precedenti ma non uguali.

Aggiungi un link simbolico:

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

Trova il php.ini in uso:

php -i | grep php.ini

Aggiungi le seguenti impostazioni a php.ini:

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

1

Ciò è dovuto a un errore di configurazione nelle configurazioni PHP / SQL. Da qualche parte il socket utilizzato dal server Web e dalla riga di comando è configurato in modo diverso. Consiglio di controllare la configurazione di MySQL per vedere quale socket unix è in uso, e quindi assicurarsi che lo stesso valore sia utilizzato in tutte le configurazioni e compilazioni php.ini.

Se non riesci a correggere la configurazione, dovrebbero funzionare i seguenti passaggi:

  1. Ottieni la versione di sviluppo di Drush 5.x (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) e installala invece. Ciò potrebbe causare altri problemi, ma nel complesso è piuttosto stabile.
  2. Nei tuoi siti Drupal settings.php rimuovi le impostazioni dell'host e della porta per la connessione al database e aggiungi un 'unix_socket' => '/path/to/mysql.sock' per sostituirli.

Se tutto ciò sembra complicato, un'alternativa è cambiare l'host in setting.php da localhost a 127.0.0.1. Ciò renderà il sito più lento, ma per un sito di sviluppo potrebbe non essere evidente o importante. Per un sito di produzione si desidera utilizzare il socket unix e si dovrebbe ordinare la configurazione.


Questo è davvero quello che fa. L'ho provato innumerevoli volte.
asiby,

1

Trovato un modo più semplice / alternativo per installare drush su un Mac:

Installa homebrew incollandolo in un terminale autonomo

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

Quindi aggiungi drush eseguendo quanto segue dallo stesso terminale

brew install drush

L'esecuzione dello stato di Drush ora funziona correttamente.


1

Se stai lavorando con l'installazione di MySQL.com di MySQL, devi solo puntare PHP nella posizione giusta per il .sockfile.

Nel tuo php.ini, aggiungi / modifica queste due righe:

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

Per trovare la posizione del tuo php.ini (potrebbe non esistere ancora), usa questo

php -i | grep php.ini

Se il php.inifile non esiste ancora, crealo.


0

Concordo con le altre risposte che Drupal non riesce a trovare il socket mysql. Le altre risposte mi hanno aiutato ma erano incomplete per l'installazione con il servizio Oracle Mysql ufficiale installato. Vale a dire, il percorso predefinito del file mysql.sock. Quindi, ecco un riepilogo delle mie risposte consigliate a seconda del caso d'uso:

Se usi mysql come incluso nel pacchetto MAMP ufficiale, usa la risposta di @Andrew Alexander:

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

Per Oracle MYSQL ufficiale:

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

0

Per un'installazione di MAMP 4, la soluzione stava selezionando "Rendi disponibile questa versione dalla riga di comando".

Configurazione MAMP


0

Ho ricevuto il seguente messaggio nel terminale:

(MAMP PRO + PHP 7)

Il comando Blockquote Drush è terminato in modo anomalo a causa di un errore irreversibile.
[errore] PDOException: SQLSTATE [HY000] [2002] Nessun file o directory simile in Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService () Blockquote

Ho risolto il problema con l'aiuto di queste istruzioni


0

Ho dimenticato che il mio mysql locale viene eseguito su un numero di porta univoco, quindi ero confuso sul perché stavo ottenendo questo fino a quando non ho rivisto la mia configurazione su un altro sito locale.

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.