MySQL se recusa a aceitar conexões remotas

13

Acabei de instalar um novo servidor ubuntu com 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 verifiquei se o mysql escuta conexões remotas, vi o seguinte:

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 o 127.0.0.1:3306que significa "Eu aceito apenas conexões locais".

Eu verifiquei minhas variáveis skip_networkinge 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 absolutamente a mesma configuração 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 para o mysql responder a conexões remotas?

Temnovit
fonte
Observe que a variável bind_addressestá disponível apenas desde a versão 5.6 ( bugs.mysql.com/bug.php?id=44355 ), portanto, ela retornará um conjunto vazio na v5.5, mesmo que esteja definido.
falsificador
Mostre-nos suas configurações de my.cnf.
precisa saber é o seguinte
Você verificou problemas fora do mySQL, como um firewall ou um problema de roteamento?
Stese 03/04/19

Respostas:

20

Tente adicionar bind-address = 0.0.0.0à sua [mysqld]seção my.cnfe reinicie o mysqld .

Guido Vaccarella
fonte
2
O arquivo está em/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo
O meu estava em /etc/my.cnf.d/bind-addr.cnf
joseph
0

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

Por exemplo, tente criar um usuário como:

CRIAR USUÁRIO yourusername @ '%' IDENTIFICADO POR 'yourpassword'

e tente se conectar com esse usuário.

periket2000
fonte
3
A conexão recusada geralmente significa que nada está escutando na porta IP: relevante.
precisa saber é o seguinte
É verdade que fiquei impressionado com 'Não é possível conectar ao servidor MySQL', não me lembro no telnet. Desculpe.
precisa saber é o seguinte
"Não é possível conectar ao MySQL" não se origina de um privilégio indisponível para um usuário. É um par {IP: port} que não corresponde a uma tentativa de conexão.
Fabien Haddadi
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 desesperadamente com o cliente mysql 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, mysql fresco 5.7.18, users / db created, bind-address comentou-out, mysqld reiniciado

Ondrej
fonte
Uma explicação racional é que o servidor someHost MySQL está realmente ouvindo o 3306, como demonstrado pela diretiva --port. Mas o binário do cliente mysql vem da versão MariaDB ... portanto, usa a porta 3307 como padrão, a menos que seja especificado o contrário. Verifique a origem do binário do cliente mysql que você está usando. Dica: verifique a sua variável de ambiente PATH também ...
Fabien Haddadi
0

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

Usei o netstat para informar que o servidor estava em execução e na porta correta. Também pude perceber que meu servidor não estava aceitando conexões nessa 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
➜  ~ 

Após outra resposta útil sobre os comandos de firewall do Fedora, eu poderia abrir as portas corretas.

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

Meu comando 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ão do usuário.

Eric Fossum
fonte
0

Eu mariadbinstalei. O soulution foi modificar o bind-addresslocalizado em/etc/mysql/mariadb.conf.d/50-server.cnf

Alex Balcome
fonte
-1

A solução descrita no link abaixo deve resolver seu problema http://www.debianhelp.co.uk/remotemysql.htm

bml13
fonte
2
bml13, citar um link para apoiar sua resposta é uma prática excelente, mas preferimos que as pessoas escrevam a resposta aqui e adicionem um link, não apenas colocem o link e deixem por isso.
MadHatter
1
... especialmente porque agora é um link morto.
Haz