web-dev-qa-db-fra.com

Impossible de se connecter à MySQL avec un serveur distant

Nous avons un serveur MySQL sur l’une des machines virtuelles distantes (Windows Server 2008). Jusqu'à hier, nous avons pu nous connecter au serveur MySQL, à l'aide de Workbench installé sur notre machine locale.

Hier, il y a eu un redémarrage de la machine sur laquelle la machine virtuelle est installée. Après cela, nous ne pouvons plus nous connecter à MYSQL. Bien que je puisse faire un ping et connecter à distance cette machine virtuelle particulière. Je peux même exécuter les requêtes à l'intérieur du plan de travail installé dans la VM.

Je ne suis pas très doué pour le réseautage ou la sécurité. S'il vous plaît aidez-moi à résoudre ce problème.

Erreur :

Votre tentative de connexion a échoué pour l'utilisateur 'root' de votre hôte sur le serveur ABC: 3306: Impossible de se connecter au serveur MySQL sur 'ABC' (10060)

7
TBA

Vraiment, cela pourrait être une multitude de raisons possibles, espérons que ce soit un début:

Vérifier le réseau de base

Depuis la machine virtuelle MySQL, ouvrez une invite de commande et tapez IPCONFIG /ALL. Cela vous montrera toutes les adresses IP liées à différentes cartes réseau. 

Vérifiez que l’adresse IP à laquelle vous êtes connecté est bien répertoriée, la machine virtuelle peut avoir reçu une nouvelle adresse IP de DHCP plutôt que d’avoir une adresse IP statique après son redémarrage.

Nom d'hôte vs IP

Vous devriez vérifier la résolution du nom d'hôte. D'après votre erreur citée, cela signifie que vous vous connectez à un nom d'hôte plutôt qu'à une adresse IP de serveur. Vérifiez que votre machine peut résoudre le nom d'hôte à l'aide de l'adresse IP correcte. Il peut également être intéressant de modifier le nom d'hôte de l'adresse IP réelle du serveur dans la chaîne de connexion.

Fichier de configuration MySQL

Vous avez dit que vous utilisiez MySQL sous Windows, il était d'usage de renommer le my.cnf en my.ini. Le fichier de configuration des anciennes versions de MySQL antérieures à 4.1.5 était généralement stocké dans c:\my.ini ou c:\windows\my.ini. Pour les versions ultérieures, l'emplacement par défaut est le répertoire d'installation, généralement %PROGRAMDATA%\MySQL\MySQL Server xxx.

Une fois le fichier de configuration localisé, ouvrez-le dans le Bloc-notes (ou un éditeur de texte similaire), localisez la section [mysqld] et assurez-vous que port= le port auquel vous essayez de vous connecter et bind-address= l'adresse IP à laquelle vous essayez de vous connecter.

Ports du serveur

À partir du serveur virtuel MySQL, ouvrez une invite de commande et tapez netstat –ano. Cela vous montrera une liste des processus et les adresses IP/ports sur lesquels ils sont en train d'écouter. Le serveur MySQL devrait être répertorié ici et devrait écouter sur le même port et la même adresse IP que le fichier de configuration définit.

Fenêtre pare-feu

Vous devriez avoir une règle de pare-feu pour autoriser MySQL, ce qui suit va en ajouter une sur le port par défaut de 3306

netsh advfirewall firewall add rule name="MySQL Server" action=allow protocol=TCP dir=in localport=3306

Identifie s'il s'agit d'une machine spécifique

Vous pouvez configurer l'application MySQL Workbench sur un autre poste de travail et essayer de vous connecter pour identifier s'il s'agit d'un problème global ou simplement lié à votre poste de travail spécifique.

22
Steve

l’administrateur mysql de votre base de données devrait autoriser la connexion à distance au serveur mysql. change ceci dans my.cnf:

bind-address    = 127.0.0.1 # this shoul be your mysql server ip

et commenter ceci:

# skip-networking
9
Volkan Ulukut

Il est fort probable que votre configuration ait été configurée pour une adresse IP modifiée. Par défaut, mysql ne vous laissera pas vous connecter depuis des hôtes distants à moins que vous n'accordiez explicitement les autorisations pour un utilisateur spécifique sur un schéma spécifique ou un groupe de schémas, par exemple si vous avez fait quelque chose comme ceci:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Peut-être que ce que vous avez réellement fait a été de définir l’attribution de subvention sur votre propre adresse IP, c’est-à-dire l’adresse de votre ordinateur local, et si votre ordinateur local (et non le serveur distant) a changé son adresse IP, alors mysql ne vous laissera pas vous connecter sauf si vous avez l'adresse IP "1.2.3.4" que vous n'avez évidemment plus si vous avez une adresse IP dynamique (commune avec les connexions DSL/Cable)

Alors connectez-vous via SSH ou Telnet ou tout ce que vous utilisez à votre serveur Windows et accédez à mysql en tant que root et procédez comme suit:

SELECT * from information_schema.user_privileges;

Cela vous montrera les subventions sur tous les utilisateurs et comment ils sont autorisés à se connecter. Si vous ne voyez pas votre adresse IP locale ou un caractère générique (ce qui vous permettrait de vous connecter depuis n'importe quel ordinateur distant au serveur), vous devez le configurer comme suit:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Où USERNAME est bien sûr votre utilisateur. Assurez-vous qu'après cela, il y a un caractère générique/point/caractère générique qui signifie que vous voulez que cet utilisateur puisse se connecter à n'importe quel schéma (base de données, pour mysql) à partir de n'importe quel utilisateur de n'importe quel réseau. Mais je vous recommanderais de n'accorder des droits à l'utilisateur que pour le schéma spécifique auquel vous devez vous connecter.

Ensuite, si vous avez réellement les bonnes informations et que vous ne pouvez toujours pas vous connecter, utilisez un scanner de ports comme nmap ou quelque chose comme ça pour analyser les ports et voir si mysql est:

  1. Ouvert et écoute du réseau externe
  2. Exécution sur le port par lequel vous souhaitez réellement vous connecter

Si 1 est vrai, vérifiez 2 car il existe peut-être une mauvaise configuration du port. Mais si l'un de ces 2 points fonctionne, cela ne ressemble certainement pas à une configuration réseau, mais à un paramètre utilisateur ou à autre chose.

6
Gustavo Rubio

Avez-vous essayé de vérifier que si quelqu'un ajoutait la sécurité à votre port spécifié, par exemple 3306.

2
zeeshan
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password';

cette commande devrait faire l'affaire pour tous les utilisateurs. @Gustavo Rubio a déjà donné l'explication appropriée.

Pour vérifier quels ports sont ouverts, exécutez cmd sur la machine virtuelle et tapez.

netstat -a

TCP    127.0.0.1:3360     Hostname:3360   LISTENING

Le fichier my.cnf se trouve Mysql-install-path\MySQL\Serveur MySQL xxx, assurez-vous de sauvegarder l’original avant de modifier

Impossible de se connecter au serveur [local] MySQL

Test de l'installation du serveur MySQL sous Microsoft Windows

MySQL Workbench: Gérez MySQL sur des serveurs Windows sous Windows

1
XXX

Pour la première fois, vous devez tester et vous assurer que votre connexion à mysql n'est pas bloquée par le pare-feu.

Pour désactiver le pare-feu sur chaque hôte de votre cluster, procédez comme suit sur chaque hôte.

1. Enregistrez le jeu de règles iptables existant.

iptables-save > /root/firewall.rules

2. Désactiver iptables.

Pour RHEL, CentOS, Oracle et Debian:

chkconfig iptables off

et

/etc/init.d/iptables stop

Pour SLES:

chkconfig SuSEfirewall2_setup off

et

rcSuSEfirewall2 stop

Pour Ubuntu:

service ufw stop

http://www.cloudera.com/documentation/enterprise/5-7-x/topics/install_cdh_disable_iptables.html

0
Adam Endvy

Cela dépend de votre configuration, mais si vous utilisez cPanel, accédez simplement à RemoteMYSQL et entrez votre hôte. Vous pouvez également utiliser un caractère générique. Ci-dessous a fonctionné pour moi quand j'ai eu l'erreur 

"Impossible de se connecter au serveur de base de données '' en tant qu'utilisateur ''. Port: l'hôte '' n'est pas autorisé Autorisé à se connecter à ce serveur MySQL"

 cPanel setup to allow remote mysql connection

0
Robert Sinclair