Pergunta

Meu código estava trabalhando muito bem ontem e hoje, de repente, simplesmente não querem se conectar ao meu banco de dados. Eu mudei nenhuma configuração nele ou no código e eu não ter atualizado qualquer software também. Tudo que eu faço é a seguinte:

new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');

E eu recebo uma mensagem de exceção agradável dizendo isso:

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...

A coisa é: eu estou claramente não tentando se conectar usando um soquete unix mas usando TCP / IP. O que estou fazendo de errado? Existe algo que eu estou ausente aqui?

Obrigado por qualquer ajuda.

Foi útil?

Solução

Você está usando um socket Unix. Ao ler "localhost" bibliotecas do cliente MySQL não interpretá-lo como host TCP "localhost" e resolver esse nome, mas use o padrão soquete localização. Para utilizar o TCP na máquina local você tem que usar 127.0.0.1 como hostname.

Para especificar o unix_socketinstead uso passado de host no DSN. A localização do soquete usado para localhost pode ser definida em tempo de compilação ou em algumas versões do PHP usando pdo_mysql.default_socket na php.ini.

Outras dicas

A partir da documentação do PHP sobre a conexão com o MySQL usando DOP: PDO_MYSQL DNS

A nota no final diz:

Unix apenas:

Quando o nome do host é definido como "localhost", em seguida, a conexão com o servidor é feita através de um soquete de domínio. Se PDO_MYSQL é compilado contra libmysql em seguida, a localização do arquivo de soquete é a de libmysql compilado no local. Se PDO_MYSQL é compilado contra mysqlnd um Tomada padrão pode ser definido através da definição pdo_mysql.default_socket.

Assim, a fim de corrigir isso você teria que configurar corretamente no php.ini a localização do seu mysql.sock

  1. Encontre o seu arquivo mysql.sock. Os locais mais comuns:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • ou se você usar MAMP ou LAMP olhar para dentro da pasta tmp para mysql
  2. Editar seu arquivo php.ini e devidamente definir o valor para pdo_mysql.default_socket

  3. Reinicie o servidor Apache para pegar as alterações no arquivo php.ini

No Ubuntu, você pode usar essa configuração no php.ini

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

Acabei de adicionar esta linha:

'unix_socket'   => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',

e tudo estava bem.

Há uma atualização das docs para Drush que está documentado aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top