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.

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 .


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.


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

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.


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

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.


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.


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.


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

0

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

Configuração MAMP


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


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',
);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.