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.