Tente adicionar bind-address = 0.0.0.0
à sua seção [mysqld]
do seu my.cnf
e reinicie o mysqld .
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?
Tente adicionar bind-address = 0.0.0.0
à sua seção [mysqld]
do seu my.cnf
e reinicie o mysqld .
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.
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
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.
Eu tenho mariadb
instalado. A alma foi modificar o bind-address
localizado em /etc/mysql/mariadb.conf.d/50-server.cnf
A solução descrita no link abaixo deve resolver seu problema link
Tags mysql