102 votes

Connexions à distance Mysql Ubuntu

Pour une raison quelconque, je ne parviens pas à me connecter à distance à mon serveur MySQL. J'ai tout essayé et j'obtiens toujours des erreurs.

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)

Maintenant, j'ai essayé de lancer

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

et toujours rien ! Qu'est-ce que je fais de mal ?

EDITAR : my.cnf a commenté le bind ip .

356voto

apesa Points 3725

Pour exposer MySQL à autre chose que localhost, vous devrez avoir la ligne suivante

Pour mysql version 5.6 et inférieure

sans commentaire dans /etc/mysql/my.cnf et assigné à l'adresse IP de votre ordinateur et non à celle de la boucle.

Pour mysql version 5.7 et supérieure

sans commentaire dans /etc/mysql/mysql.conf.d/mysqld.cnf et assigné à l'adresse IP de votre ordinateur et non à celle de la boucle.

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

Ou ajouter un bind-address = 0.0.0.0 si vous ne souhaitez pas spécifier l'IP

Puis arrêtez et redémarrez MySQL avec la nouvelle entrée my.cnf. Une fois en marche, allez dans le terminal et entrez la commande suivante.

lsof -i -P | grep :3306

Il devrait en ressortir quelque chose comme ceci, avec votre adresse IP réelle dans les xxx.

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

Si la déclaration ci-dessus renvoie correctement, vous serez alors en mesure d'accepter les utilisateurs distants. Cependant, pour qu'un utilisateur distant puisse se connecter avec les privilèges corrects, il faut que cet utilisateur soit créé à la fois dans le localhost et dans le '%' comme dans.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

alors,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

et enfin,

FLUSH PRIVILEGES; 
EXIT;

Si vous n'avez pas créé le même utilisateur que ci-dessus, lorsque vous vous connectez localement, vous pouvez hériter des privilèges de la base localhost et avoir des problèmes d'accès. Si vous voulez restreindre l'accès de myuser, vous devez vous renseigner sur la syntaxe de l'instruction GRANT. ICI Si vous passez à travers tout cela et que vous avez toujours des problèmes, postez une sortie d'erreur supplémentaire et les lignes appropriées de my.cnf.

NOTE : Si lsof ne renvoie pas ou n'est pas trouvé vous pouvez l'installer ICI en fonction de votre distribution Linux. Vous n'avez pas besoin de lsof pour faire fonctionner les choses, mais il est extrêmement pratique lorsque les choses ne fonctionnent pas comme prévu.

MISE À JOUR : Si, même après avoir ajouté/modifié l'option bind-address en my.cnf n'a pas fonctionné, alors allez le modifier à l'endroit où il a été déclaré à l'origine :

/etc/mysql/mariadb.conf.d/50-server.cnf

41voto

Jonathan L Points 1

Ajouter quelques points en plus de l'excellent post d'apesa :

1) Vous pouvez utiliser la commande suivante pour vérifier l'adresse IP que le serveur mysql écoute

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) Utiliser FLUSH PRIVILEGES pour forcer le chargement des tables de subventions si pour une raison quelconque les changements ne prennent pas effet immédiatement.

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

user == l'utilisateur que vous utilisez pour vous connecter à mysql ex.Root
passwd == le mot de passe que vous utilisez pour vous connecter à mysql avec

3) Si le pare-feu Netfilter est activé ( sudo ufw enable ) sur la machine du serveur mysql, procédez comme suit pour ouvrir le port 3306 pour l'accès à distance :

sudo ufw allow 3306

vérifier le statut en utilisant

sudo ufw status

4) Une fois que la connexion à distance est établie, elle peut être vérifiée sur la machine cliente ou sur la machine serveur à l'aide de commandes.

netstat -an | grep 3306
netstat -an | grep -i established

8voto

Vinh Lee Points 91

MySQL n'écoute que l'hôte local, si nous voulons permettre l'accès à distance, nous devons faire quelques changements dans le fichier my.cnf :

sudo nano /etc/mysql/my.cnf

Nous devons commenter les lignes bind-address et skip-external-locking :

#bind-address = 127.0.0.1
# skip-external-locking

Après avoir effectué ces changements, nous devons redémarrer le service mysql :

sudo service mysql restart

2voto

Gaurav Singh Points 41

Vous utilisez ubuntu 12 (assez ancien)

Tout d'abord, ouvrez le fichier /etc/mysql/mysql.conf.d/mysqld.cnf ( /etc/mysql/my.cnf dans Ubuntu 14.04 et versions antérieures

Sous [mysqld], localisez la ligne, bind-address = 127.0.0.1 et changez-la en bind-address = 0.0.0.0 ou commentez-la

Ensuite, redémarrez le serveur Ubuntu MysQL systemctl restart mysql.service

Maintenant, le serveur Ubuntu permet l'accès à distance au serveur MySQL, mais vous devez encore configurer les utilisateurs de MySQL pour permettre l'accès depuis n'importe quel hôte.

L'utilisateur doit être 'username'@'%' avec toutes les subventions requises

Pour vous assurer que le serveur MySQL écoute sur toutes les interfaces, exécutez la commande netstat comme suit.

netstat -tulnp | grep mysql

J'espère que cela fonctionnera !

1voto

marw Points 856

Si vous testez sur Windows, n'oubliez pas d'ouvrir le port 3306.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X