J'ai installé le serveur MySQL sur une machine Ubuntu distante. L'utilisateur root
est défini dans la table mysql.user
de la manière suivante:
mysql> SELECT Host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| Host | user | password |
+------------------+------+-------------------------------------------+
| localhost | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Je peux accéder à l'utilisateur root
à partir de la même interface de ligne de commande de la machine distante à l'aide du client mysql
standard. Maintenant, je veux autoriser l'accès root à chaque hôte sur Internet , alors j'ai essayé d'ajouter la ligne suivante (c'est la copie exacte de la première ligne du dump précédent, à l'exception de la colonne Host
):
mysql> SELECT Host, user, password FROM user WHERE Host = '%';
+------------------+------+-------------------------------------------+
| Host | user | password |
+------------------+------+-------------------------------------------+
| % | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Mais mon client sur mon PC persiste à me dire (j'ai masqué l'adresse IP du serveur):
Erreur SQL (2003): Impossible de se connecter au serveur MySQL sur '46 .x.x.x '(10061)
Je ne peux pas dire s'il s'agit d'une erreur d'authentification ou d'une erreur de réseau. Sur le pare-feu du serveur, j'ai activé le port 3306/TCP pour 0.0.0.0/0, et ce n'est pas grave pour moi ...
Ce processus comporte deux étapes:
a) Accorder des privilèges. En tant qu'utilisateur root, exécutez:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
b) se lier à toutes les adresses:
Le moyen le plus simple est de mettre en commentaire la ligne dans votre fichier my.cnf
:
#bind-address = 127.0.0.1
et redémarrez mysql
service mysql restart
Par défaut, il se lie uniquement à localhost, mais si vous commentez la ligne, il se lie à toutes les interfaces trouvées. La mise en commentaire de la ligne équivaut à bind-address=*
.
Pour vérifier où le service mysql a été lié, exécutez-le en tant que root:
netstat -tupan | grep mysql
Mise à jour pour Ubuntu 16:
Le fichier de configuration est (maintenant)
/etc/mysql/mysql.conf.d/mysqld.cnf
(au moins sur Ubuntu 16 standard)
Exécutez la requête suivante:
use mysql;
update user set Host='%' where Host='localhost'
REMARQUE: Non recommandé pour une utilisation en production.
Parfois
bind-address = 127.0.0.1
devrait être
bind-address = *
MariaDB s'exécutant sur Raspbian - le fichier contenant l'adresse de rattachement est difficile à localiser. MariaDB a quelques pas-très-utiles-info sur le sujet.
J'ai utilisé
# Sudo grep -R bind-address /etc
pour localiser où est la fichue chose.
Je devais également définir les privilèges et les hôtes dans le mysql, comme le soulignaient tout le monde.
J'ai également eu du plaisir à ouvrir le port 3306 pour les connexions distantes à mon Raspberry Pi - utilisé finalement iptables-persistent .
Tout fonctionne bien maintenant.
si de nombreux réseaux sont connectés à votre système d'exploitation, vous devez spécifier l'un de ces réseaux dans le fichier bind-addres du fichier my.conf. un exemple:
[mysqld]
bind-address = 127.100.10.234
cette adresse IP provient d'une configuration ethX.
MYSQL 8.0 - Ouvrez le client en ligne de commande mysql
DONNEZ TOUS LES PRIVILÈGES SUR *. * À 'root' @ 'localhost';
utilise mysql
UPDATE mysql.user SET Hôte = '%' WHERE utilisateur = 'root';
Redémarrez le service mysql
mysql_update
est ce dont vous avez besoin.
Je ne sais pas pourquoi quelqu'un suivrait les moyens les plus complexes de corriger ce problème, lorsque MySql a gracieusement mis au point un outil qui le fait déjà ...
Dans mon cas, le paramètre "bind-address" était le problème. Commenter ce paramètre dans my.cnf
fait pas help, car dans mon cas, mysql a défini la valeur par défaut sur 127.0.0.1 pour une raison quelconque.
Pour vérifier quel paramètre MySql utilise actuellement, ouvrez la ligne de commande sur votre boîte locale:
mysql -h localhost -u myname -pmypass mydb
Lire le réglage actuel:
Show variables where variable_name like "bind%"
Vous devriez voir 0.0.0.0 ici si vous voulez autoriser l'accès de tous les hôtes. Si ce n'est pas le cas, éditez votre /etc/mysql/my.cnf
et définissez bind-address dans la section [mysqld]:
bind-address=0.0.0.0
Enfin, redémarrez votre serveur MySql pour prendre le nouveau paramètre:
Sudo service mysql restart
Réessayez et vérifiez si le nouveau paramètre a été enregistré.