PHP Erro fatal: exceção não capturada 'PDOException' com mensagem 'SQLSTATE [HY000] [2002] Conexão recusada

1

Eu tenho um servidor diferente para o meu banco de dados.

Quando conectei-me ao banco de dados com o PDO, usei o endereço IP da VM do banco de dados para o parâmetro do host:

$dbh = new pdo("mysql:host=192.168.56.103;port=3306;dbname=data",'root','root')

Mas eu recebo conexão recusada (PDOException 'com mensagem' SQLSTATE [HY000] [2002] '). Eu acho que não encontrei o MySQL lá. No entanto, pode encontrar a VM com esse IP.

    
por Hanane Ghobadi 08.04.2015 / 13:40

2 respostas

3

Bem, então, verifique se o mysql não está sendo executado:

sudo aptitude install nmap

E então:

sudo nmap -sS <ipofdbserverhere>

Você também pode instalar a ferramenta no servidor mysql, o comando seria:

sudo nmap -sS localhost

Em ambos os casos, sua resposta deve ser assim.

[simmel]@[mars]$ sudo nmap -sS 172.16.1.41

Starting Nmap 6.40 ( http://nmap.org ) at 2015-04-08 15:09 CEST

Nmap scan report for 172.16.1.41
Host is up (0.010s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 33.17 seconds

Se ele mostra a porta 3306, é realmente aberto e pronto para conexões. Se esse for o caso, use mysql via linha de comando do seu computador.

mysql -u<USER> -p<PASSWORD> -h<ipofdbserverhere> <databasename>

A mesma mensagem aparece? Ligação recusada? Então, seu usuário provavelmente tem os direitos errados.

Outra razão para isso é quando o servidor mysql está ligado a um determinado endereço, como 127.0.0.1.

Para descobrir, verifique a saída de:

sudo netstat -tlpen

Se o mysql não estiver ouvindo 0.0.0.0:3306 , mas para 127.0.0.1:3306 , você só poderá se conectar a partir do localhost.

Para alterar, vá para /etc/mysql/my.cnf e comente a seguinte linha:

bind-address            = 127.0.0.1

A maneira de comentá-lo é adicionar um caractere # inicial:

#bind-address            = 127.0.0.1

Salve o arquivo e reinicie o serviço mysql

sudo service mysql restart

Agora você deve conseguir se conectar.

Para alterar a porta, insira, por exemplo:

port = 8888

em /etc/mysql/my.cnf .

Salve o arquivo e reinicie o serviço mysql:

sudo service mysql restart
    
por s1mmel 08.04.2015 / 14:36
0

O erro 2002 significa que o MySQL não pode se conectar ao servidor de banco de dados local por meio do arquivo de soquete (por exemplo, /tmp/mysql.sock ).

Para descobrir onde está o seu arquivo de soquete, execute:

mysql_config --socket

em seguida, verifique se o seu aplicativo usa o arquivo de soquete do Unix correto ou se conecta através da porta TCP / IP.

Teste o soquete:

mysql --socket=/var/mysql/mysql.sock

Se o soquete do Unix estiver errado, você pode ligá-lo por symlink, por exemplo:

ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

ou corrija seu arquivo de configuração (por exemplo, php.ini ).

Para testar a conexão PDO diretamente do PHP, você pode executar:

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

Verifique também a configuração entre o Apache e o CLI (interface de linha de comando), pois a configuração pode ser diferente.

  

Pode ser que o servidor esteja em execução, mas você está tentando se conectar usando uma porta TCP / IP, pipe nomeado ou arquivo de soquete Unix diferente daquele em que o servidor está atendendo. Para corrigir isso, é necessário invocar um programa cliente (por exemplo, especificando --port option) para indicar o número de porta correto ou o pipe nomeado apropriado ou o arquivo de soquete Unix (por exemplo, --socket option).

Veja: Solucionando Problemas Conectando-se ao MySQL

Outros utilitários / comandos que podem ajudar a rastrear o problema:

  • netstat -ln | grep mysql
  • php -r "phpinfo();" | grep mysql
  • php -i | grep mysql
  • Use o XDebug com xdebug.show_exception_trace=1 no seu xdebug.ini
  • No OS X, experimente sudo dtruss -fn mysqld , no Linux depure com strace
  • Verifique as permissões no soquete do Unix: stat $(mysql_config --socket) e se você tiver espaço livre suficiente ( df -h ).
  • Reinicie seu MySQL.
  • Verifique net.core.somaxconn .
por kenorb 13.11.2015 / 00:26