Comment autoriser la connexion à distance à mysql


362

J'ai installé MySQL Community Edition 5.5 sur ma machine locale et je souhaite autoriser les connexions à distance afin de pouvoir me connecter à partir d'une source externe.

Comment puis je faire ça?



1
S'il vous arrive d'utiliser DigitalOcean, vous pouvez essayer de l'utiliser sudo mysql_secure_installation. Pour info.
Alan Dong

N'utilisez pas la mise en forme de code pour du texte qui n'est pas du code. Hors sujet.
Marquis de Lorne

@EJP pourquoi? question honnête par curiosité
René Roth

Réponses:


776

Cela est autorisé par défaut sur MySQL.

Ce qui est désactivé par défaut, c'est l' rootaccès à distance . Si vous souhaitez l'activer, exécutez cette commande SQL localement:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

Et puis trouvez la ligne suivante et commentez-la dans votre my.cnffichier, qui vit généralement sur /etc/mysql/my.cnfles systèmes Unix / OSX. Dans certains cas, l'emplacement du fichier est /etc/mysql/mysql.conf.d/mysqld.cnf).

Si c'est un système Windows, vous pouvez le trouver dans le répertoire d'installation de MySQL, généralement quelque chose comme C:\Program Files\MySQL\MySQL Server 5.5\ et le nom de fichier sera my.ini.

Changer de ligne

 bind-address = 127.0.0.1

à

 #bind-address = 127.0.0.1

Et redémarrez le serveur MySQL ( Unix / OSX et Windows ) pour que les modifications prennent effet.


4
Ok donc j'ai ajouté l'adresse binnd = 127.0.0.1 à la fin du fichier et j'ai essayé de me connecter en utilisant navicat depuis un hôte externe et j'obtiens une erreur 10060
Leo

7
Hmm, vous n'avez pas besoin de l'ajouter. Comme ma réponse l'a dit, vous devez le commenter, pas l'ajouter. Il y en a un par défaut, vous devez donc le trouver et le commenter en le préfixant avec #
mjuarez

7
Hmm, dans \ MYsql Server 5.5 \ il n'y a qu'un seul fichier ini appelé my-default.ini et la seule ligne sans le # est la suivante: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo

2
cette réponse fonctionne parfaitement. thnx @mjuarez - ACCORDER TOUS LES PRIVILÈGES SUR . TO 'root' @ '%' IDENTIFIED BY 'password' AVEC GRANT OPTION;
yadavr

66
Pour ceux qui recherchent le my.cnffichier et n'y trouvent pas de bind-addressdirective, notez que dans mon cas (MySQL version 14.14 sur Ubuntu 16.04.2) l'emplacement du fichier était/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon

49

Après avoir fait tout ce qui précède, je ne pouvais toujours pas me connecter à rootdistance, mais Telnetting au port a 3306confirmé qu'il MySQLacceptait les connexions.

J'ai commencé à regarder les utilisateurs de MySQL et j'ai remarqué qu'il y avait plusieurs utilisateurs root avec différents mots de passe.

select user, host, password from mysql.user;

Donc, dans MySQLj'ai défini à nouveau tous les mots de passe pour root et je pouvais enfin me connecter à distance en tant que root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;

4
C'est correct. Tout en suivant les étapes des autres réponses, les comptes d'utilisateurs avec un mot de passe vide semblent être créés. Vous devez donc leur ajouter des mots de passe.
chhantyal

1
Je devais combiner la réponse acceptée avec celle-ci, puis tout fonctionnait correctement.
James

8
SQL pour 5.7 et supérieurupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft

La réponse acceptée définit le mot de passe et a fonctionné pour moi.
MikeKulls

1
Merci, tout comme @James, j'ai dû combiner cela avec la réponse acceptée à corriger.
Ben Everard

39

Juste une note de mon expérience, vous pouvez trouver le fichier de configuration sous ce chemin /etc/mysql/mysql.conf.d/mysqld.cnf.

(J'ai lutté pendant un certain temps pour trouver ce chemin)


1
Cela dépend fortement de la distribution que vous utilisez. Le meilleur moyen est de le rechercher:sudo find /etc -iname 'mysql*.cnf'
Martin Konecny

J'apprécie la commande «find». Je suis nouveau sur la ligne de commande, c'est donc très utile. Merci!
Heres2u

J'ai eu du mal pendant des heures à modifier le fichier /etc/mysq/conf.d/mysql.cnf jusqu'à ce que je trouve cette réponse.
Gayan Kavirathne

26

Dans mon cas, j'essayais de me connecter à un serveur mysql distant sur cent OS. Après avoir traversé de nombreuses solutions (octroi de tous les privilèges, suppression des liaisons IP, activation de la mise en réseau), le problème n'était toujours pas résolu.

Il s'est avéré qu'en examinant diverses solutions, je suis tombé sur iptables, ce qui m'a fait réaliser que le port mysql 3306 n'acceptait pas les connexions.

Voici une petite note sur la façon dont j'ai vérifié et résolu ce problème.

  • Vérification si le port accepte les connexions:
telnet (adresse IP du serveur mysql) [portNo]
  • Ajout d'une règle de table ip pour autoriser les connexions sur le port:
iptables -A ENTRÉE -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
  • Je ne le recommanderais pas pour l'environnement de production, mais si vos iptables ne sont pas configurés correctement, l'ajout des règles peut ne pas toujours résoudre le problème. Dans ce cas, il convient de procéder comme suit:
service iptables s'arrête

J'espère que cela t'aides.


17

Veuillez suivre les étapes mentionnées ci-dessous afin de définir l'accès à distance générique pour l'utilisateur MySQL.

(1) Ouvrez cmd.

(2) accédez au chemin C: \ Program Files \ MySQL \ MySQL Server 5.X \ bin et exécutez cette commande.

mysql -u root -p

(3) Saisissez le mot de passe root.

(4) Exécutez la commande suivante pour fournir l'autorisation.

ACCORDER TOUS LES PRIVILÈGES SUR *. * À 'USERNAME' @ 'IP' IDENTIFIED BY 'PASSWORD';

USERNAME: Nom d'utilisateur que vous souhaitez vous connecter au serveur MySQL.

IP: adresse IP publique à partir de laquelle vous souhaitez autoriser l'accès au serveur MySQL.

MOT DE PASSE: Mot de passe du nom d'utilisateur utilisé.

IP peut être remplacé par% pour permettre à l'utilisateur de se connecter à partir de n'importe quelle adresse IP.

(5) Rincez les privilèges en suivant la commande et quittez.

RINCER LES PRIVILÈGES;

sortie; ou \ q

entrez la description de l'image ici


3
Après l'avoir fait, ma racine n'a toujours pas accès. Qu'est-ce que j'ai raté?
teapeng

Vous pouvez essayer avec votre adresse IP du système local au lieu de% à la 4ème étape. Ça devrait marcher. % signifie n'importe quelle adresse IP.
Hiren Parghi

6

Si votre processus serveur MySQL écoute uniquement sur 127.0.0.1 ou :: 1, vous ne pourrez pas vous connecter à distance. Si vous avez un bind-addressparamètre, /etc/my.cnfcela peut être la source du problème.

Vous devrez également ajouter des privilèges pour un non- localhostutilisateur.


Bizarre, comment votre serveur pourrait-il "écouter" sur une autre adresse IP 127.0.0.1?
Pacerier

2
@Pacerier 127.0.0.1 est uniquement lié à l'interface de bouclage. Les connexions externes ne fonctionneront pas. Un système aura souvent plusieurs interfaces réseau, chacune d'elles devant être liée spécifiquement, ou vous pouvez utiliser l'adresse bind-all 0.0.0.0.
tadman

6

Si vous avez installé MySQL, brewil n'écoute vraiment que sur l'interface locale par défaut. Pour résoudre ce problème, vous devez modifier /usr/local/etc/my.cnfet modifier le bind-addressde 127.0.0.1à *.

Ensuite, courez brew services restart mysql.


1
Pour mon serveur ubuntu 16.04.4, le paramètre d'adresse de liaison se trouve dans /etc/mysql/mysql.conf.d/mysqld.cnf
Frank

Ce n'est pas seulement en utilisant brew, tout MySQL aura ce paramètre par défaut, pour autoriser uniquement les connexions locales.
nivs1978

6

Tous les processus de connexion à distance. La connexion à distance est désactivée par défaut.Vous devez l'ouvrir manuellement pour tous les ip ... pour donner accès à tous les ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

Ip spécifique

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

puis

flush privileges;

Vous pouvez vérifier votre hôte utilisateur et votre mot de passe

SELECT host,user,authentication_string FROM mysql.user;

Maintenant, votre devoir est de changer cela

bind-address = 127.0.0.1

Vous pouvez le trouver sur

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

si vous ne trouvez pas cela là-bas, essayez ceci

sudo nano /etc/mysql/my.cnf

commenter dans ce

#bind-address = 127.0.0.1

Redémarrez ensuite Mysql

sudo service mysql restart

Profitez maintenant d'une connexion à distance


3

Juste pour info j'ai tiré mes cheveux avec ce problème pendant des heures .. enfin j'ai appelé mon hébergeur et j'ai trouvé que dans mon cas en utilisant un serveur cloud qui dans le panneau de contrôle pour 1and1 ils avaient un pare-feu secondaire que vous devez cloner et ajouter un port 3306. Une fois ajouté, je suis entré directement ..


Cela semble très spécifique à votre situation. Je ne suis pas une source infinie de connaissances sur le réseautage, mais êtes-vous sûr que cette solution s'applique bien à ce problème?
Sandy Gifford

2
J'ai aussi eu ce problème. Commun avec les serveurs hébergés dans le cloud,
Matthew Lock

2

Pour qui il en a besoin, vérifiez que le port de pare-feu 3306 est également ouvert, si votre service de pare-feu est en cours d'exécution.



1

Et pour les utilisateurs d'OS X, sachez que le paramètre bind-address est généralement défini dans le launchd plist et non dans le fichier my.ini. Donc, dans mon cas, je me suis retiré <string>--bind-address=127.0.0.1</string>de /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.


Autre emplacement pour le fichier plist:~/Library/LaunchAgents
Dylan Nissley

1

Si mysqldune adresse de liaison est définie sur une adresse de bouclage / locale (par exemple 127.0.0.1), le serveur ne sera pas accessible à partir d'hôtes distants, car une interface de bouclage ne peut être atteinte à partir d'aucun hôte distant.

Définissez cette option sur 0.0.0.0( ::pour IPv4 + 6) pour accepter les connexions de n'importe quel hôte, ou vers une autre adresse accessible en externe si vous ne souhaitez autoriser les connexions que sur une seule interface.

La source


1

L'activation de l'accès root à distance peut être dangereuse. Il serait préférable de configurer des comptes d'utilisateurs avec des autorisations plus restrictives. Les trois étapes suivantes devraient le faire.

  1. Assurez-vous que la ligne commençant par bind-address ...est au moins mise en commentaire dans votre fichier my.ini ou my.cnf. S'il n'existe pas, continuez. Vous pouvez trouver ce fichier dans C:\ProgramData\MySQL\MySQL Server 8.0Windows.

  2. Ensuite, vérifiez que le compte d'utilisateur avec lequel vous établissez la connexion n'a pas localhostdans le champ Limit to Hosts Matching. Bien que cela ne soit pas recommandé, vous pouvez le mettre %à la place à des fins de test. Vous pouvez le faire en ouvrant une connexion locale au serveur avec MySQL Workbench, puis en accédant à Serveur> Utilisateurs et privilèges dans la barre de menus et en trouvant le compte d'utilisateur avec lequel vous souhaitez vous connecter.

Le champ "Limiter à la correspondance des hôtes" est ce qui vous interdit de vous connecter de manière non locale. C'est-à-dire qu'il limite les connexions acceptées à un modèle d'adresses IP. Idéalement, vous devriez accéder au serveur MySQL à partir d'une adresse IP statique ou d'un sous-réseau, afin d'être aussi restrictif que possible.

  1. De toute évidence, votre pare-feu devrait permettre à l'application MySQL Server de communiquer sur le port souhaité. L'équipement de mise en réseau physique entre vous et votre serveur doit permettre la communication sur le port auquel vous souhaitez vous connecter. (port 3306 généralement)

le transfert de port (3306) dans le routeur m'a aidé à vous remercier.
Kurdish Programmer Il y a

0

parfois besoin d'utiliser le nom du pc sur windows

première étape) mettre dans le fichier de configuration de mysql:

mysqld.cnf SET bind-address = 0.0.0.0

(pour laisser les connexions recibe via tcp / ip)

deuxième étape) rendre l'utilisateur dans mysql, les utilisateurs de table, avec le nom du pc sur les propriétés de windows , PAS ip

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.