web-dev-qa-db-fra.com

Se connecter à mysql sur Amazon EC2 à partir d'un serveur distant

Je veux me connecter à la base de données sur EC2 à partir de ma machine locale. Je ne peux pas tout faire et j'ai tout essayé. J'utilise cette commande pour me connecter à EC2:

mysql -uUSERNAME -hEC2_IP -pPASSWORD

Cette erreur est générée

ERREUR 2003 (HY000): Impossible de se connecter au serveur MySQL sur 'IP' (110)

J'ai modifié my.cnf avec

skip networking
bind-address            = 0.0.0.0

Impossible de se connecter à la base de données

58
Aashish Katta

Il peut y avoir une des raisons suivantes:

  1. Vous devez créer une entrée dans Amazon Security Group pour autoriser l'accès à distance à votre instance à l'instance Amazon EC2. : - Je pense que cela est fait par vous car d'après votre question, il semble que vous ayez déjà fait une entrée avec 0.0.0.0, qui permet à tout le monde d'accéder à la machine.
  2. MySQL n'autorise pas l'utilisateur à se connecter à partir d'une machine distante: - Par défaut, MySql crée un ID utilisateur root avec un accès administrateur. Mais l'accès aux identifiants root est limité à localhost uniquement. Cela signifie que l'ID utilisateur root avec le mot de passe correct ne fonctionnera pas si vous essayez d'accéder à MySql à partir d'un ordinateur distant. Pour résoudre ce problème, vous devez autoriser l'utilisateur root ou un autre utilisateur de base de données à accéder à MySQL à partir d'une machine distante. Je ne recommanderais pas d'autoriser l'utilisateur root à accéder à la base de données à partir d'une machine distante. Vous pouvez utiliser le caractère générique% pour spécifier un ordinateur distant.
  3. Vérifiez si le pare-feu local de la machine n'est pas activé. Et s'il est activé, assurez-vous que le port 3306 est ouvert.

Veuillez suivre le lien suivant: Comment activer l'accès à distance au serveur de base de données MySQL?

52
Sandip Dhummad

comme mentionné dans les réponses ci-dessus, il peut s'agir de groupes de sécurité AWS, etc. mais si vous avez créé un utilisateur et lui avez donné l'accès à distance '%' et que vous obtenez toujours cette erreur, vérifiez votre fichier de configuration mysql, sous Debian, vous pouvez le trouver ici: /etc/mysql/my.cnf et trouver la ligne:

bind-address            = 127.0.0.1

et le changer pour:

bind-address            = 0.0.0.0

et redémarrez mysql.

sur debian/ubuntu:

/etc/init.d/mysql restart

J'espère que cela fonctionne pour vous.

84
mohamed elbou

Mise à jour: février 2017

Voici les COMPLETE STEPS pour l'accès à distance de MySQL (déployé sur Amazon EC2): -

1. Ajoutez MySQL aux règles entrantes.

Accédez au groupe de sécurité de votre instance ec2 -> modifier les règles entrantes -> ajouter une nouvelle règle -> choisissez MySQL/Aurora et la source à Anywhere.

2. Ajoutez bind-address = 0.0.0.0 à my.cnf

Dans la console d'instance:

Sudo vi /etc/mysql/my.cnf

cela ouvrira l'éditeur vi.
dans le fichier my.cnf, après [mysqld] ajouter une nouvelle ligne et écrire ceci:

bind-address = 0.0.0.0

Enregistrez le fichier en entrant :wq(entrer)

maintenant redémarrez MySQL:

Sudo /etc/init.d/mysqld restart

3. Créez un utilisateur distant et accordez des privilèges.

se connecter à MySQL:

mysql -u root -p mysql _ (entrez le mot de passe après cela)

Maintenant, écrivez les commandes suivantes:

CREATE USER 'jerry'@'localhost' IDENTIFIED BY 'jerrypassword';

CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerrypassword';

GRANT ALL PRIVILEGES ON *.* to jerry@localhost IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* to jerry@'%' IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

EXIT;

Ensuite, vous pouvez accéder à distance à MySQL dB en entrant l'adresse DNS/IP publique de votre instance en tant qu'adresse de l'hôte MySQL, nom d'utilisateur en jerry et mot de passe en jerrypassword. (Le port par défaut est 3306)

40
JerryGoyal

Il se peut que vous n'ayez pas configuré le Amazon Security Group attribué à votre instance EC2 pour accepter les demandes entrantes sur le port 3306 (port par défaut pour MySQL).

Si tel est le cas, vous pouvez facilement ouvrir le port du groupe de sécurité en quelques clics:

1) Connectez-vous à votre console AWS et accédez à "EC2".

2) Dans le menu de gauche sous "Réseau et sécurité", allez à "Groupes de sécurité"

3) Vérifier le groupe de sécurité en question

4) Cliquez sur l'onglet 'Entrant'

5) Choisissez "MYSQL" dans la liste déroulante et cliquez sur "Ajouter une règle".

Peut-être pas la raison, mais vaut le détour ...

27
Tom Mac

Une étape utile pour détecter ce problème consiste à identifier l'adresse de liaison que MySQL a réellement définie. Vous pouvez le faire avec netstat:

netstat -nat |grep :3306

Cela m'a aidé à cerner mon problème, car il y a plusieurs fichiers de configuration mysql et que j'avais modifié le mauvais. Netstat a montré que mysql utilisait toujours la mauvaise configuration:

ubuntu@myhost:~$  netstat -nat |grep :3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

Donc, j'ai récupéré les répertoires de configuration pour tous les autres fichiers susceptibles de remplacer mes paramètres et trouvés:

ubuntu@myhost:~$  Sudo grep -R bind /etc/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf:bind-address         = 127.0.0.1
/etc/mysql/mysql.cnf:bind-address = 0.0.0.0
/etc/mysql/my.cnf:bind-address = 0.0.0.0

D'oh! Cela m'a montré que le paramètre que j'avais ajusté était le mauvais fichier de configuration. J'ai donc édité le fichier RIGHT cette fois-ci, l'ai confirmé avec netstat et j'étais en affaires.

8
Bob Diego

Pour certaines configurations d'ubuntu, l'adresse de liaison doit être modifiée dans ce fichier:

/etc/mysql/mysql.conf.d/mysqld.cnf 
7
KC Kern

Bien que cette question semble avoir été résolue, un autre problème courant que vous pouvez obtenir est que l'utilisateur de la base de données a été mal configuré. Ceci est un problème d'administration et d'autorisations mysql:

  1. EC2_DB lancé avec IP 10.55.142.100
  2. EC2_web lancé avec IP 10.55.142.144
  3. EC2_DB et EC2_WEBare dans le même groupe de sécurité avec accès via votre port de base de données (3306)
  4. EC2_DB a une base de données mysql qui peut être atteinte localement par l’utilisateur root de la base de données ('root'@'localhost')
  5. EC2_DB mysql DB a un utilisateur distant 'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
  6. Un appel de bash à mysql depuis EC2_WEB a échoué: mysql -umy_user -p -h ip-10-55-142-100.ec2.internal de même que l’hôte fait référence à l’adresse IP explicite, au DNS public, etc.

L'étape 6 échoue car la base de données mysql a les permisions utilisateur incorrectes. Il a besoin de ceci:

GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'ip-10-55-142-144.ec2.internal' IDENTIFIED BY PASSWORD 'password'

J'aimerais penser que % fonctionnerait avec n'importe quel serveur distant, mais je n'ai pas trouvé que c'était le cas.

S'il vous plaît, faites-moi savoir si ceci vous aide.

5
New Alexandria

Changement /etc/mysql/my.cnf:

bind-address            = 127.0.0.1 to 0.0.0.0

Créez un utilisateur avec '%' Host et redémarrez:

/etc/init.d/mysql restart

Travaille pour moi! :)

4
Edwin Wachs

Connectez-vous à AWS Management Console. Naviguez vers RDS puis sélectionnez l'instance de base de données et allez dans "Groupes de sécurité". L'ajout de CIDR/IP sous le groupe de sécurité a résolu le problème.

2
RC_02
  • DÉMARRER MYSQL en utilisant l’administrateur
    • mysql -u admin-user -p (invite de saisie du mot de passe activé)
  • Créer un nouvel utilisateur:
    • CREATE USER 'newuser' @ '%' IDENTIFIED BY 'password'; (% -> anyhost)
  • Accorder des privilèges:
    • GRANT SELECT, DELETE, INSERT, UPDATE SUR Db_name. * TO 'newuser' @ '%';
    • FLUSH PRIVILEGES;

Si vous exécutez une instance EC2, n'oubliez pas d'ajouter les règles entrantes dans le groupe de sécurité avec MYSQL/Aurura.

Si ces étapes ne fonctionnent pas, vérifiez le fichier /etc/mysql/my.cnf et éditez le paramètre bind_address comme suit:

bind_address = 0.0.0.0

1
Rifaideen

La solution à cela est trois étapes:

  1. Dans MySQL, le fichier my.ini/my.cnf change l'adresse de lien pour accepter la connexion de tous les hôtes (0.0.0.0).

  2. Dans aws console - groupe de sécurité spécifique à ec2, ouvrez votre port mysql (la valeur par défaut est 3306) pour accepter les connexions de tous les hôtes (0.0.0.0).

  3. Dans le pare-feu Windows, ajoutez le port mysql (la valeur par défaut est 3306) aux exceptions.

Et cela va commencer à accepter les connexions à distance.

1
dhalsumit

J'ai parcouru toutes les réponses précédentes (et les réponses à des questions similaires) sans succès, alors voici ce qui a finalement fonctionné pour moi. L’étape clé était d’accorder explicitement les privilèges sur le serveur mysql à un utilisateur local (pour le serveur), mais avec mon adresse IP locale ajoutée (myuser@*.*.*.*). La solution complète étape par étape est la suivante:

  1. Commentez le bind_address faire la queue /etc/mysql/my.cnf sur le serveur (c'est-à-dire l'instance EC2). Je suppose bind_address=0.0.0.0 fonctionnerait également, mais ce n'est pas nécessaire, comme d'autres l'ont mentionné.

  2. Ajoutez une règle (comme d'autres l'ont déjà mentionné) pour MYSQL au groupe de sécurité de l'instance EC2 avec le port 3306 et soit My IP ou Anywhere comme source. Les deux fonctionnent bien après avoir suivi toutes les étapes.

  3. Créez un nouvel utilisateur myuser avec des privilèges limités pour une base de données particulière mydb (en suivant essentiellement les instructions de ce tutoriel Amazon ):

    $EC2Prompt> mysql -u root -p
    [...omitted output...]
    mysql>  CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_strong_password';
    mysql>  GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'localhost';`
    
  4. Voici l'étape clé sans laquelle mon adresse locale a été refusée lors d'une tentative de connexion à distance (ERROR 1130 (HY000): Host '*.*.*.23' is not allowed to connect to this MySQL server):

    mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'*.*.*.23';
    mysql> FLUSH PRIVILEGES;`
    

    (remplacez '*.*.*.23' par votre adresse IP locale)

  5. Pour faire bonne mesure, j'ai quitté mysql sur le shell et redémarré le serveur msyql:

    $EC2Prompt> Sudo service mysql restart

  6. Après ces étapes, j’ai pu me connecter avec joie depuis mon ordinateur avec:

    $localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p

    (remplacez myinstancename.amazonaws.com par l'adresse publique de votre instance EC2)

0
adelval

Je sais que c'est un ancien post mais ...

Je rencontre ce problème et j'ai établi que mon problème n'est pas l'instance EC2. Il semble que cela pourrait être un bogue dans le logiciel du pilote client MySQL. Je n'ai pas encore fait de recherche approfondie, mais je suis allé jusqu'à installer MySQL Workbench sur l'instance EC2 et l'informatique est également irrégulière. La connexion échoue par intermittence (l'erreur est "connexion annulée"). Ce lien suggère un bug possible plus bas dans la pile, pas EC2.

Bien sûr, je n’ai pas fait de recherche exhaustive et mon message pourrait en fait être faux, mais il convient de le noter et/ou d’explorer de toute façon, à mon humble avis.

0
Siphiwe Gwebu

L'IP par défaut de Mysql dans l'instance EC2 Ubuntu est 127.0.0.1 _ si vous voulez changer, il vous suffit de suivre les réponses qui ont déjà été données ici.

0
Renato Lazaro

Lors de la création de l'utilisateur comme "myuser" @ "localhost", l'utilisateur ne peut être connecté qu'à partir de localhost. Créez un utilisateur uniquement pour l'accès à distance et utilisez l'adresse IP de votre client distant à partir de laquelle vous vous connecterez au serveur MySQL. Si vous pouvez supporter le risque d'autoriser les connexions de tous les hôtes distants (généralement lorsque vous utilisez une adresse IP dynamique), vous pouvez utiliser "myuser" @ "%". Je l'ai fait et j'ai également supprimé bind_address de /etc/mysql/mysql.cnf (Ubuntu) et maintenant, la connexion est parfaite.

mysql> select Host,user from mysql.user;
+-----------+-----------+
| Host      | user      |
+-----------+-----------+
| %         | myuser    |
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+
3 rows in set (0.00 sec)
0
Zeeshan