Perdeu a conexão com o servidor MySQL em 'lendo o pacote de comunicação inicial', erro do sistema: 0

127

Estou recebendo erro:

"Conexão perdida com o servidor MySQL ao 'ler o pacote de comunicação inicial, erro do sistema: 0"

enquanto eu vou conectar meu db.

Se estou usando localhost, tudo está funcionando bem. Mas quando estou usando meu endereço IP ativo, como abaixo, está recebendo um erro:

mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());
Rikesh
fonte

Respostas:

104

Alguém aqui sugere que pode ser um problema de firewall:

Acabei de ter esse problema e descobri que era meu firewall. Eu uso o PCTools Firewall Plus e não estava permitindo acesso total ao MySQL. Depois que mudei, estava tudo bem. Espero que ajude.

Poderia ser isso?

Além disso, alguém aqui sugere que pode ser porque o servidor MySQL está vinculado ao IP de loopback (127.0.0.1 / localhost) que efetivamente impede você de se conectar de "fora".

Se for esse o caso, você precisará fazer o upload do script para o servidor da web (que provavelmente também está executando o servidor MySQL) e manter o host do servidor como 'localhost'

Thomas Daugaard
fonte
7
o que você quer dizer com host local? Também estou enfrentando o mesmo problema e usando apenas localhost também. O aplicativo está na mesma máquina que o banco de dados. O que você quis dizer com localhost?
06/15
6
@oneofakind Ele quer se conectar ao 'localhost "em vez de' 127.0.0.1 '
Alex Holsgrove
2
Eu tive o mesmo problema no OSX com o mamp pro. Corrigi-o desativando / reativando a caixa de seleção "permitir acesso à rede ao mysql" na guia mamp pro mysql.
Ousmane
43

Abra o arquivo de configuração mysql chamado my.cnf e tente encontrar "endereço de ligação", substitua aqui a configuração (127.0.0.1 OR localhost) pelo ip do servidor ativo (o ip que você está usando na função mysql_connect)

Isso resolverá o problema definitivamente.

obrigado

intekhab rizvi
fonte
2
Certifique-se de usar bind-address = 127.0.0.1 ou localhost ao usar o túnel ssh. Teve este problema com o bitnami, onde o endereço de ligação era o ip da máquina.
Z2z 03/01/19
1
O mesmo problema e solução para o servidor dedicado independente do Debian 10 + MySQL.
Vilq 27/01
Deve-se mencionar que geralmente pode ser preferível vincular o serviço mysql 127.0.0.1aonde aplicável, para que o acesso direto de outros hosts não seja possível. Isso evita ataques remotos de força bruta e não expõe possíveis problemas de segurança à rede. Se o seu aplicativo estiver localizado na mesma máquina (que é uma configuração de hospedagem muito comum), use 127.0.0.1resp. localhostcomo host mysql e funcionará da mesma maneira que vincular o serviço à sua interface externa e usá-lo como host mysql. Se o seu aplicativo estiver localizado em outro lugar, use uma rede interna, se possível.
David
36

1) Permitir conexão remota ao MySQL. Editar arquivo:

>sudo nano /etc/mysql/my.cnf

Linha de comentário:

#bind-address       = 127.0.0.1

Reinicie o MySQL:

>sudo service mysql restart

2) Crie usuário para conexão remota.

>mysql -uroot -p

CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev_password';
CREATE USER 'developer'@'%' IDENTIFIED BY 'dev_password';

GRANT ALL ON *.* TO 'developer'@'localhost';
GRANT ALL ON *.* TO 'developer'@'%';

3) No meu caso, eu preciso conectar remotamente do Windows à máquina VirtualBox com o Ubuntu. Então, eu preciso permitir a porta 3306 no iptables:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
sNICkerssss
fonte
1
Para mim, esqueço de verificar o endereço de ligação no my.cnf. Obrigado.
abkrim
1
Isso ajudou totalmente. Obrigado!
osehgol
1
Funcionou perfeitamente, mas eu estava usando o ambiente de trabalho no Windows, então não execute a etapa 3., mas funcionou. Obrigado!
RohitAneja
Embora o último comando não tenha funcionado para mim, a criação de um novo usuário resolveu meu problema. Posso acessar o mysql no raspberry pi no meu laptop. Obrigado!
Eyyüp Alkış
lembre-se de FLUSH PRIVILEGESdepois de criar um novo usuário.
Yew Hong Tat
15

Teve este problema ao configurar um novo servidor escravo. Constatou que estava faltando o endereço IP do servidor escravo no /etc/hosts.allowarquivo do servidor mestre . Adicionado o endereço IP e deixe-me conectar ao servidor principal.

Observe que eu uso hosts.allowe hosts.denypara controlar o acesso.

Marca
fonte
meu problema com o conector / c ++. Agora, se eu pudesse encontrar o que precisa definição para estar em allowquando denytem ALL: ALL...
isso realmente salvou meu live, eu estava tendo problemas para conectar ao mysql do workbench, precisava adicionar "ALL: 127.0.0.1" ao arquivo /etc/hosts.allow e ele começou a funcionar
Tomáš Tibenský
No meu caso, o / etc / hosts tinha uma entrada incorreta (antiga) para o IP do host. Quando emitiu um novo IP, ele veio sob o antigo e foi aparentemente ignorado. A exclusão do IP antigo solucionou o erro.
David Ramirez
7

Eu tive esse problema e acabou sendo o administrador do sistema anterior alterado a porta em que o MySQL estava sendo executado. O MySQL Workbench estava tentando se conectar ao 3306 padrão, mas o servidor estava rodando em 20300.

user3347295
fonte
1
Boa coisa para esta resposta. Acontece que eu fiz isso comigo mesmo.
cautionbug
5

O problema no meu caso era o MySQL ser vinculado apenas ao lo no Linux. para resolver o problema, editei o my.cnf (encontrado em /etc/mysql/my.cnf) removendo a linha bind-address = 127.0.0.1

isso permite que o mysql se ligue a qualquer interface de rede

Renato Mendes
fonte
5

Este erro ocorreu ao tentar conectar-me ao Google Cloud SQL usando o MySQL Workbench 6.3.

Após uma pequena pesquisa, descobri que meu endereço IP foi alterado pelo provedor de Internet e ele não era permitido no Cloud SQL.

Eu o autorizei e voltei ao trabalho.

Paulo Ocasião
fonte
4

Eu encontrei exatamente esse mesmo erro ao conectar a partir do MySQL workbench. Aqui está como eu consertei. Meu arquivo de configuração /etc/my.cnf tinha o valor do endereço de ligação definido como o endereço IP do servidor. Isso precisava ser feito para configurar a replicação. Enfim, eu resolvi fazendo duas coisas:

  1. crie um usuário que possa ser usado para conectar-se a partir do endereço de ligação no arquivo my.cnf

por exemplo

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. altere o valor do nome do host do MySQL nos detalhes da conexão no ambiente de trabalho MySQL para corresponder ao endereço de ligação
Tishan
fonte
Muito obrigado, também tivemos replicação do MySQL e o endereço de ligação era local: 10.0.0.x. Eu estava lutando por dias por esta solução.
iFadi 5/02
3

O problema para mim foi que as consultas DNS foram bloqueadas pelo FW na sub-rede. A solução foi desativar as pesquisas de DNS no MySQL.

Bill Grady
fonte
Suspeito que o DNS também seja o culpado.
Zenexer
3

Acabei de configurar o mysql em uma caixa do Windows. Eu recebi o erro do OP ao tentar conectar-me ao cliente Navicat MySql na mesma caixa. Eu tive que especificar 127.0.0.1 como o host, e isso foi conseguido.

localhost ou o endereço IP real dos servidores não funcionou.

Paul B
fonte
3

O erro significa que não recebeu uma resposta da porta em que esperava encontrar o servidor. As causas variam entre o contato com a máquina incorreta (por uma série de razões) e o servidor não estar na porta esperada.

Verifique a qual porta seu servidor está associado no /etc/mysql/my.cnf. Isso corresponde ao que está na sua declaração de conexão. Se eles corresponderem, tente conectar-se ao mysql no próprio servidor e na linha de comando da máquina em que você está executando o cliente. Se funcionar de um lugar e não de outro, você poderá ter um problema de configuração do firewall / roteador.

ClearCrescendo
fonte
Eu não acho que isso esteja correto, se não houver nada ouvindo nessa porta, você receberá a resposta ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61), não a Lost connection to MySQL servermensagem.
Ken Williams
2

no meu caso, eu tinha ALL: ALL no hosts.deny. Alterar isso para ALL: PARANOID resolveu meu problema ao conectar-se através do ssh

domoarigato
fonte
2

O problema foi bastante estúpido para mim.

Eu costumava ter o mesmo problema na máquina Ubuntu do AWS EC2 (o MariaDB está instalado localmente por enquanto), então tentei fazer o tunelamento SSH e tive o mesmo problema. Então eu tentei ssh encapsular o terminal:

ssh -L13306:127.0.0.1:3306 root@ip.address -i my/private/key.pem

E isso me disse o seguinte:

Por favor, faça o login como o usuário "ubuntu" ao invés do usuário "root".

Mudei o usuário ssh do root para o ubuntu, assim como minha configuração do ssh, e ela se conectou perfeitamente.

Portanto, verifique seu usuário de conexão SSH.

Eu supervisionei isso, então isso demorou meia hora do meu tempo, então espero que isso seja útil para você.

Arda
fonte
2

Para mim, o arquivo de configuração foi encontrado "/etc/mysql/mysql.conf.d/mysqld.cnf", comentando o endereço de ligação, fez o truque.

Como podemos ver aqui: Em vez de pular a rede, o padrão agora é ouvir apenas no host local, que é mais compatível e não é menos seguro.

Scott
fonte
Para minha maior surpresa, este funcionou no Debian 10. Dei uma chance a isso e FUNCIONA! Editado mysql config sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfe em vez de bind-address = 111.112.113.114eu usei bind-address = 127.0.0.1. As configurações do túnel SSH são definidas conforme descrito em hostpresto.com/community/tutorials/… Bom trabalho! Obrigado!
klor
1

Deparou-se com esse mesmo problema, o endereço Bind e para trás sem sucesso. A solução para mim foi liberar privilégios .

mysql> FLUSH PRIVILEGES;
Marko Bajlovic
fonte
1

Para mim definir bind-address = 0.0.0.0emmysql/my.cnf funcionou. Basicamente, ouve todos os endereços (mas ainda uma porta).

E não se esqueça de reiniciar o servidor: systemctl restart mysql

Jahanzeb Khan
fonte
6
Todos os endereços / interfaces, mas apenas uma única porta.
Zenexer
1

Acabei de ter o mesmo problema, mas no meu caso resolvi-o com

serviço mysqld start

GunSky7
fonte
1

Mais uma razão ...

Encontrei um servidor Ubuntu onde tudo era personalizado e não conseguia conectar por causa do mesmo erro.

Essa configuração estava dentro /etc/ssh/sshd_config

PermitTunnel no

Depois de virar

PermitTunnel yes

Consegui me conectar remotamente ao meu banco de dados MySQL

lewis4u
fonte
1

Estou tentando conectar meu contêiner db docker no Ubuntu 18.04, mesmo problema.

Primeiro verifique seu dispositivo executando nmcli devpara verificar se o dispositivodocker0 está conectado.

Se não estiver conectado, tente reiniciar o serviço docker:

sudo service docker restart

Belter
fonte
1

No meu caso, era a porta de bloqueio de wifi da universidade 3306. Consegui conectar usando um ponto de acesso móvel.

Mude para um ponto de acesso móvel ou outra rede e, se funcionar, você sabe que a rede original está bloqueando a porta 3306. Se você receber o mesmo erro em mais de uma rede, saberá que é específico para sua máquina.

R Diaz
fonte
1

Firewalldbloqueia o endereço IP. para dar acesso, use estes comandos:

firewall-cmd --permanent --zone = confiável --add-source = YOUR_IP / 32

firewall-cmd --permanent --zone = confiável --add-port = 3306 / tcp

firewall-cmd --reload

Rodniko
fonte
0

Ao conectar-me ao Mysql remotamente, recebi o erro. Eu recebi este aviso em /var/log/mysqld.log:

[Warning] IP address 'X.X.X.X' could not be resolved: Temporary failure in name resolution

Acabei de adicionar esta linha ao /etc/hostsarquivo:

X.X.X.X some_name

Problema resolvido! Não usar skip-name-resolvecausou alguns erros no meu aplicativo local ao conectar ao MySQL.

Amin Sh
fonte
0

Eu tive problema idêntico. Para corrigi-lo, mudei o host de localhost: 3306 para apenas localhost. Portanto, o erro pode surgir quando você separa uma porta imprópria para conexão. É melhor deixá-lo como padrão.

Barto
fonte
1
Isto é provável porque o MySQL não aceite a porta como parte do nome do host, em vez disso você precisa usar o argumento-P 3306
argila H
0

A permissão de leitura e gravação do diretório do banco de dados também foi um problema que encontrei. Apenas verifique se o seu aplicativo é capaz de rw arquivos no local db. Experimente o chmod 777 para testar.

Abbas
fonte
0

Eu enfrentei o mesmo problema. Eu verifiquei e tentei definir AllowTcpForwarding Yes, mas ele estava ausente no meu sshd_config, portanto não ajuda. Não mudei o sshd_config ou o my.cnf. Verifique se o nome do host ssh NÃO é o mesmo do nome do host mysql (use localhost).

No ambiente de trabalho, escolha + para adicionar nova conexão e defina o seguinte:

  • método de conexão: padrão TCP / IP sobre SSH
  • Nome do host SSH: 192.168.0.50:22 (substitua o IP do servidor SSH remoto e a porta (opcional))
  • Nome de usuário SSH: sshuser
  • Você pode definir a senha ou adicionar no prompt
  • Nome do host MYSQL: localhost ou 127.0.0.1
  • Porta do servidor MYSQL: 3306
  • Você pode definir a senha ou adicionar no prompt

Teste a conexão. Deverá ser bem sucedido e clique em OK.Viola!

Reagan Ochora
fonte
0

Se o endereço de ligação não estiver presente no seu arquivo de configuração e o mysql estiver hospedado na instância da AWS, verifique seu grupo de segurança. Em condições ideais, as regras de entrada devem aceitar toda a conexão da porta 3306 e a regra de saída deve responder de volta a todos os IPs válidos.

Aman Bansal
fonte
0

Eu fiz abaixo de 3 etapas, trabalhando para mim.

  1. bind-address = "YOUR MACHINE IP"no my.cnfarquivo /etc/my.cnf

  2. Reinicie o serviço por comando: service httpd restart

  3. GRANT ALL PRIVILEGES ON yourDB.* TO 'username'@'YOUR_APPLICATION_IP' IDENTIFIED BY 'YPUR_PASSWORD' WITH GRANT OPTION;

Kamal Oberoi
fonte
0

Eu tive um erro semelhante (conexão com o MYSQL no aws via MYSql Workbench). Eu costumava me conectar bem antes e de repente ele parou de funcionar e simplesmente não funcionou novamente). Minha conexão foi via SSH protegida por arquivo de chave.

Acontece que eu estava atingindo o tempo limite. Portanto, aumentei o tempo limite da conexão SQL para 30 segundos (do padrão 10) e foi bom voltar novamente. coisas a tentar (se você estiver em uma configuração semelhante)

  1. Você pode ssh diretamente do terminal para o servidor (detecta problemas com as principais permissões de arquivo, etc.)?
  2. Você pode, através do terminal, conectar-se ao MySQL com o mesmo usuário / senha usando algo como mysql -u [username] -p [database] ? Isso verificará problemas de direitos do usuário etc.
  3. se os dois funcionarem, seus parâmetros não serão o problema e talvez o mesmo problema de tempo limite como eu (exceto que ele nunca disse erro de tempo limite, mas pediu para verificar permissões etc.)
Burges K
fonte
0

Espaço em disco limitado pode causar esse erro.

Verifique o espaço em disco

$ df -h

Tente aumentar o espaço se houver 100% de discos usados.

No meu caso: Eu tenho a caixa Vagrant (8.0.1) (Ubuntu 16.04) Minha capacidade de disco mysql era de 10 GB, aumentei para 20 GB

$ sudo lvextend -L20G -r /dev/mapper/homestead--vg-mysql--master

Então reinicie o mysql

$ sudo service mysql restart
Sadee
fonte
0

Se você se deparar com essa conexão incorreta do controle remoto, vá para a opção mysql remote no cpanel e adicione% no Host (% curinga é permitido).

John
fonte