MySQL se recusa a aceitar conexões remotas

10

Acabei de instalar um novo servidor Ubuntu com o mysql (percona 5.5), mas ele se recusa a aceitar conexões de hosts remotos

Aqui está o que acontece se eu tentar conectar-me a este servidor remotamente:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

Quando eu verifiquei se o mysql escuta conexões remotas eu vi isso:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Como você pode ver, diz 127.0.0.1:3306 , que significa "Eu aceito apenas conexões locais".

Eu verifiquei minhas variáveis skip_networking e bind-address - tudo está desativado:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

Eu tenho outro servidor com a configuração absolutamente igual e funciona muito bem:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

Qual pode ser a razão disso? Como faço o mysql responder a conexões remotas?

    
por Temnovit 04.04.2014 / 11:43

6 respostas

16

Tente adicionar bind-address = 0.0.0.0 à sua seção [mysqld] do seu my.cnf e reinicie o mysqld .

    
por 04.04.2014 / 12:22
0

Pode ser devido à tabela de usuários do banco de dados mysql (use mysql; show tables;). Se a ligação a 0.0.0.0 não funcionar para você, tente dar ao seu usuário o host '%' no lugar de 'localhost' nessa tabela.

Por exemplo, tente criar um usuário como:

CREATE USER yourusername@'%' IDENTIFIED BY 'yourpassword'

ant tente se conectar com esse usuário.

    
por 04.04.2014 / 13:24
0

Quando tudo mais falhar e você tiver certeza de que o servidor está escutando na porta padrão e você está tentando se conectar com o cliente mysql desesperadamente de outro host, tente especificar a porta na URL do comando mysql.

Por mais estranho que seja, tive que usar a seguinte sintaxe:

mysql -h someHost --port=3306 -u someUser -p someDb

Eu encontrei isso (bug?) totalmente por acidente (depois de perder meus cabelos :)).

Minha configuração: debian jessie, fresco mysql 5.7.18, usuários / db criados, bind-address comentado, mysqld reiniciado

    
por 23.06.2017 / 03:08
0

Acabei de ter este problema e o meu problema parecia estar relacionado com o firewall. BTW - Obrigado @Temnovit pelos comandos de solução de problemas do Mysql.

Eu usei o netstat para informar que o servidor estava em execução e na porta correta. Eu também poderia dizer que meu servidor não estava aceitando conexões naquela porta com um simples comando telnet.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

Seguindo outra resposta útil sobre os comandos do firewall do Fedora, eu pude abrir as portas corretas.

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Meu comando de telnet foi bem sucedido.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

Se você ainda tiver problemas, é provável que haja um problema de permissões de usuário.

    
por 18.08.2018 / 23:26
0

Eu tenho mariadb instalado. A alma foi modificar o bind-address localizado em /etc/mysql/mariadb.conf.d/50-server.cnf

    
por 13.11.2018 / 19:42
-1

A solução descrita no link abaixo deve resolver seu problema link

    
por 04.04.2014 / 12:23

Tags