MySQL refuse d'accepter les connexions à distance

13

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

Lorsque 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, cela 127.0.0.1:3306signifie "J'accepte uniquement les connexions locales".

J'ai vérifié mes variables skip_networkinget bind-address- 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 la même configuration 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?

Temnovit
la source
Notez que la variable bind_addressn'est disponible que depuis la version 5.6 ( bugs.mysql.com/bug.php?id=44355 ), elle renverra donc un ensemble vide dans la v5.5 même s'il l'est.
faker
Montrez-nous vos paramètres my.cnf.
user9517
Avez-vous vérifié les problèmes en dehors de mySQL, tels qu'un pare-feu ou un problème de routage?
Stese

Réponses:

20

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

Guido Vaccarella
la source
2
Le fichier est à/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo
Le mien était dans /etc/my.cnf.d/bind-addr.cnf
joseph
0

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.

periket2000
la source
3
La connexion refusée signifie généralement que rien n'écoute sur le port IP:
user9517
Certes, j'ai été flashé par «Impossible de se connecter au serveur MySQL», je ne me souviens pas sur le telnet. Désolé.
periket2000
"Impossible de se connecter à MySQL" ne provient pas d'un privilège indisponible pour un utilisateur. Il s'agit d'une paire {IP: port} qui ne correspond pas à une tentative de connexion.
Fabien Haddadi
0

Lorsque tout le reste échoue et que vous êtes sûr que le serveur é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 de la commande mysql.

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é

Ondrej
la source
Une explication rationnelle est que le serveur someHost MySQL écoute réellement sur 3306, comme démontré par la directive --port. Mais votre binaire client mysql provient de la version MariaDB ... utilise donc le port 3307 par défaut, sauf indication contraire. Vérifiez l'origine du binaire client mysql que vous utilisez. Astuce: vérifiez aussi votre variable d'environnement PATH ...
Fabien Haddadi
0

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.

Eric Fossum
la source
0

J'ai mariadbinstallé. Le Soulution était de modifier le bind-addresssitué à/etc/mysql/mariadb.conf.d/50-server.cnf

Alex Balcome
la source
-1

La solution décrite dans le lien ci-dessous devrait résoudre votre problème http://www.debianhelp.co.uk/remotemysql.htm

bml13
la source
2
bml13, citer un lien à l'appui de votre réponse est une excellente pratique, mais nous préférons de beaucoup que les gens écrivent la réponse ici et ajoutent un lien, ne se contentent pas de mettre le lien et d'en rester là.
MadHatter
1
... surtout parce que c'est maintenant un lien mort.
haz