web-dev-qa-db-fra.com

MySQL refuse d'accepter les connexions à distance

Je viens d'installer un nouveau serveur Ubuntu avec mysql (percona 5.5), mais il refuse d'accepter les connexions des hôtes distants

Voici ce qui se passe si j'essaie de me connecter à distance à ce serveur:

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

Quand j'ai vérifié si mysql écoute les connexions à distance, j'ai vu ceci:

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

Comme vous pouvez le voir, il est dit 127.0.0.1:3306 ce qui signifie "J'accepte uniquement les connexions locales".

J'ai vérifié mon skip_networking et bind-address variables - tout est désactivé:

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)

J'ai un autre serveur avec absolument le même config et cela fonctionne très bien:

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

Quelle peut en être la raison? Comment faire en sorte que mysql réponde aux connexions à distance?

13
Temnovit

Essayez d'ajouter bind-address = 0.0.0.0 à ton [mysqld] section de votre my.cnf et redémarrez mysqld.

20
Guido Vaccarella

Je viens d'avoir ce problème et mon problème semble être lié au pare-feu. BTW - Merci @Temnovit pour les commandes de dépannage de Mysql.

J'ai utilisé netstat pour dire que le serveur était en cours d'exécution et sur le bon port. Je pourrais également dire que mon serveur n'acceptait pas les connexions sur ce port avec une simple commande 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
➜  ~ 

Après une autre réponse utile sur les commandes du pare-feu Fedora, j'ai pu ouvrir les ports appropriés.

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

Ma commande telnet a ensuite réussi.

# 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.
➜  ~

Si vous rencontrez toujours des problèmes, il s'agit probablement d'un problème d'autorisations utilisateur.

0
Eric Fossum

Lorsque tout le reste échoue et que vous êtes sûr que le serveur IS écoute sur le port par défaut et que vous essayez de vous connecter désespérément avec le client mysql à partir d'un autre hôte, essayez de spécifier le port sur l'URL du mysql commander.

Aussi étrange soit-il, j'ai dû utiliser la syntaxe suivante:

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

J'ai trouvé ce (bug?) Totalement par accident (après avoir perdu mes cheveux :)).

Ma configuration: debian jessie, mysql frais 5.7.18, utilisateurs/db créés, adresse de liaison commentée, mysqld redémarré

0
Ondrej

J'ai mariadb installé. L'âme était de modifier le bind-address situé à /etc/mysql/mariadb.conf.d/50-server.cnf

0
Alex Balcome

Cela pourrait être dû à la table utilisateur de la base de données mysql (utilisez mysql; show tables;). Si la liaison à 0.0.0.0 ne fonctionne pas pour vous, essayez de donner à votre utilisateur l'hôte '%' à la place de 'localhost' dans cette table.

Par exemple, essayez de créer un utilisateur comme:

CRÉER UN UTILISATEUR yourusername @ '%' IDENTIFIED BY 'yourpassword'

et essayez de vous connecter avec cet utilisateur.

0
periket2000