Eu tenho `PDOException: SQLSTATE [HY000] [2002] Nenhum arquivo ou diretório` ao usar drush [fechado]

21

Instalei o Drush pela primeira vez (pode ser um erro de configuração) e estou tentando atualizar para a versão principal mais recente do Drupal.

Drush está me dando esse erro - estou em uma caixa 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.
Jack Ryan
fonte
11
Você concluiu essas etapas? Sei que pode não ser exatamente o seu problema, mas pode ajudar.
Chapabu
Qual versão do drush você está usando? Não é questão que parece ser idêntica à sua: drupal.org/node/832472
F1234k
Eu estou usando a versão Drush-7.x-4.5 e Drupal 7.9
FLY
adicionou as etapas que segui à minha pergunta. Costuras como staps semelhantes você está sugessting @Chapabu
FLY
11
Você tem um problema de conexão PHP / MySQL (não relacionado ao Drupal) - stackoverflow.com/questions/2412009/…
Clive

Respostas:

42

Foi assim que eu resolvi no macOS:

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

Fonte: Trabalhando com Drush no Mamp .

Jack Ryan
fonte
Para mim, estava procurando em "/ tmp" o arquivo mysql.sock. Então eu tive que criar um link simbólico para a minha instalação do MAMP. Apenas para sua informação, para quem se deparar com isso.
22417 Patrick
37

Na configuração do banco de dados no arquivo settings.php do site Drupal, tente alterar o host para 127.0.0.1 em vez de localhost.

substitua o padrão: 'host' => 'localhost',

com: 'host' => '127.0.0.1',

Eu tive esse erro no OS X XAMPP, mas a solução deve ser aplicada aqui também. Como Clive mencionou, é um problema de conexão do MySQL. Este post tem mais sobre o problema subjacente.

darkcody
fonte
Solução pura e simples. Porém, ele funciona em uma base por site, mas fez o truque aqui.
Ignacio Segura Postigo 23/11
A resposta mais popular não funciona para mim (estou usando o MAMP Pro), mas esta funciona. Obrigado!
Kelley Curry
11
Não! Isso pode obter Drush ao trabalho ... mas posteriormente provoca Drupal para falhar
sea26.2
11

Explicação

O erro PDOException - 2002 significa que seu drush não pode se conectar ao servidor de banco de dados local do MySQL através do arquivo de soquete (por exemplo /tmp/mysql.sock), conforme configurado no seu php.ini.

Na verdade, isso não está muito relacionado a drushsi próprio, é sua configuração do PHP e esse erro pode ser reproduzido por:

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

Consertar

Se o seu MySQL funcionar corretamente, verifique se estes dois arquivos:

  1. mysql_config --socket

    ou: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

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

correspondência e pontos para o mesmo arquivo e ambos existem.

Caso contrário, verifique qual está correto:

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

Em seguida, corrija o problema usando uma das seguintes soluções:

  • faça o link simbólico para apontar para o mysql.socksoquete unix em funcionamento (para o MAMP, consulte a resposta de Andrew ),

    • por exemplo, se você estiver usando o MAMP, poderá criar um link simbólico para o local padrão:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • caminho correto do seu pdo_mysql.default_socket, mysql.default_socketou mysqli.default_socketno seuphp.ini

  • especifique unix_socketno seu settings.phpna sua $databasesvariável, por exemplo

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

Solução de problemas

Outros casos extremos podem ser:

  • permissões incorretas (por exemplo, para as pastas pai),
  • você está sem espaço,
  • você tem várias versões do PHP, verifique exatamente qual você está usando e qual configuração está alterando,
  • Depurar com o XDebug:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • ou definido xdebug.show_exception_trace=1no seuxdebug.ini
  • Depuração: no OS X com sudo dtruss -fn mysqld, no Linux comstrace
  • Veja também: Conexão MySQL não funcionando: 2002 Nenhum arquivo ou diretório na SO
kenorb
fonte
6

Estou usando o MAMP Pro e tive esse mesmo problema. A maneira mais fácil que encontrei para corrigi-lo foi adicionar a seguinte linha à sua matriz $ database no arquivo settings.php.

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

Na íntegra, deve ficar assim:

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

O erro exato que eu estava recebendo era assim:

Exceção não capturada adicional lançada ao manipular exceção.

Original

PDOException: SQLSTATE [HY000] [2002] Nenhum arquivo ou diretório em drupal_is_denied () (linha 2193 de ...

Adicional

PDOException: SQLSTATE [HY000] [2002] Nenhum arquivo ou diretório em _registry_check_code () (linha 3477 de ...


O comando Drush foi finalizado de forma anormal devido a um erro irrecuperável.

digitalblake
fonte
2
esta foi a solução mais rápida e fácil para mim usando MAMP
formiga
3

Resolvi isso com as etapas a seguir, semelhantes às respostas anteriores, mas não iguais.

Adicione um link simbólico:

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

Encontre o php.ini sendo usado:

php -i | grep php.ini

Adicione as seguintes configurações ao php.ini:

pdo_mysql.default_socket= /var/mysql/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock
ryrye
fonte
1

Isso ocorre devido a um erro de configuração nas suas configurações PHP / SQL. Em algum lugar, o soquete usado pelo servidor da web e a linha de comando é configurado de maneira diferente. Eu recomendo verificar sua configuração do MySQL para ver qual soquete unix está em uso e, em seguida, verifique se o mesmo valor é usado em todas as configurações e compilações do php.ini.

Se você não conseguir corrigir a configuração, as seguintes etapas deverão funcionar:

  1. Obtenha a versão de desenvolvimento do Drush 5.x (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) e instale-a. Isso pode causar outros problemas, mas no geral é bastante estável.
  2. Nos sites Drupal, settings.php remova as configurações de host e porta da conexão com o banco de dados e adicione 'unix_socket' => '/path/to/mysql.sock' para substituí-las.

Se tudo isso parecer complicado, uma alternativa é alterar o host em setting.php de localhost para 127.0.0.1. Isso tornará o site mais lento, mas para um site de desenvolvimento pode não ser perceptível ou importante. Para um site de produção, você deseja usar o soquete unix e deve resolver a configuração.

Kjartan
fonte
Isso é realmente o que faz. Eu testei inúmeras vezes.
asiby
1

Encontrou uma maneira mais fácil / alternativa de instalar o drush em um Mac:

Instale o homebrew colando-o em um terminal independente

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

Adicione drush executando o seguinte no mesmo terminal

brew install drush

O status de drush em execução está bom agora.

MOSCA
fonte
1

Se você estiver trabalhando com a instalação do MySQL.com, basta apontar o PHP no local certo para o .sock arquivo.

No seu php.ini, adicione / corrija estas duas linhas:

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

Para encontrar a localização do seu php.ini (ele ainda pode não existir), use este

php -i | grep php.ini

Se o php.iniarquivo ainda não existir, crie-o.

Chris Burgess
fonte
0

Concorde com outras respostas que o Drupal não consegue encontrar o soquete mysql. As outras respostas me ajudaram, mas estavam incompletas para a instalação com o serviço oficial Oracle Mysql instalado. Ou seja, o local padrão do arquivo mysql.sock. Então, aqui está uma recapitulação das minhas respostas recomendadas, dependendo do seu caso de uso:

Se estiver usando o mysql como incluído no pacote oficial do MAMP, use a resposta de @Andrew Alexander:

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

Para o Oracle MYSQL oficial:

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

Para uma instalação do MAMP 4, a solução estava verificando "Disponibilizar esta versão na linha de comando".

Configuração MAMP

Shaun Dychko
fonte
0

Recebi a seguinte mensagem no terminal:

(MAMP PRO + PHP 7)

O comando Blockquote Drush foi encerrado de forma anormal devido a um erro irrecuperável.
[erro] PDOException: SQLSTATE [HY000] [2002] Nenhum arquivo ou diretório em Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService () Blockquote

Resolvi o problema com a ajuda destas instruções

lesley n.
fonte
0

Eu esqueci que o meu mysql local roda em um número de porta exclusivo, então fiquei confuso por que estava recebendo isso até revisar minha configuração em outro site local.

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