Impossible d'accéder à distance au serveur MySQL fonctionnant sur Mac OS X

11

J'ai un serveur MySQL exécuté sur mon ordinateur de travail, qui exécute Mac OS X Maverick. Je veux y accéder à partir d'un ordinateur personnel, qui dispose également de Mac OS Maverick.

Depuis le terminal, si dans 1 onglet, je ssh dans mon ordinateur de travail et laisse simplement la session ssh y rester sans être inactif, puis sur un autre onglet, je peux accéder au serveur MySQL.

Cependant, sans la session ssh en cours d'exécution, j'obtiendrai l'erreur suivante

ERREUR 2003 (HY000): impossible de se connecter au serveur MySQL sur 'SERVER_IP_ADDRESS' (60)

J'ai essayé de modifier le my.cnffichier sur le serveur en commentant bind-address ou en l'affectant, 0.0.0.0mais cela ne fonctionne pas.

Pourquoi est-ce comme ça? Comment puis-je configurer le serveur afin qu'il autorise l'accès à distance sans avoir à exécuter ssh sur le client? Puis-je avoir une aide s'il vous plait?

chepukha
la source
J'ai le même problème avec PostGIS fonctionnant sur OS X distant ... peut se connecter à la base de données lorsqu'il sshest ouvert dans un onglet, mais sinon non. Je pense que le problème est que le processus du serveur de base de données est en pause ou ne fonctionne pas lorsque je ne suis pas connecté au serveur distant.
andybega

Réponses:

20

Je me suis cogné la tête contre cette erreur aujourd'hui sur OSX Yosemite avec MySQL 5.7 récemment mis à jour avec Homebrew. Suite aux suggestions sur StackOverflow et ailleurs, j'ai cherché des my.cnffichiers tous spécifiés bind-address=0.0.0.0. J'ai même supprimé et réinstallé MySQL en suivant ces instructions , puis réinstallé à l'aide de brew install mysql. Toujours aucune connexion à distance autorisée.

Ce n'est que lorsque j'ai couru ps -ax | grep mysqlet remarqué que l'adresse de liaison était passée dans la commande de lancement (remplaçant ainsi tous les my.cnffichiers) que j'ai creusé un peu plus et découvert que Homebrew lie MySQL à 127.0.0.1 par défaut .

Modification ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistde changer --bind-address=127.0.0.1pour --bind-address=0.0.0.0résoudre mon problème (ce dernier devrait être remplacé par une adresse IP spécifique si ce n'est pas seulement une machine de développement).

Je pense que c'est une information vitale qui manquait dans la plupart des ressources que j'ai consultées, alors j'espère que publier ceci ici aidera quelqu'un d'autre!

EDIT: Comme LeandroCR l'a indiqué dans les commentaires, l'exécution brew services restart mysqlécrasera le fichier plist dans LaunchAgents avec celui par défaut, ce qui conduira MySQL à refuser mystérieusement à nouveau les connexions. Donc, un meilleur conseil que ce que j'ai écrit à l'origine est le suivant:

  1. Editez /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plistet remplacez --bind-address=127.0.0.1par bind-address=*ou --bind-address=0.0.0.0( voir la documentation MySQL sur bind-address )
  2. Redémarrez mysql en utilisant brew services restart mysql

Ensuite, MySQL devrait continuer à accepter les connexions non locales à partir de là - jusqu'à ce que vous le réinstalliez, probablement.

Edit (septembre 2019) Timothy Zorn souligne que ce problème ne se produit plus pour MySQL 8.x installé et exécuté via Homebrew, donc ma réponse ci-dessus, écrite en 2016, peut ne concerner que 5.x.

Emma Burrows
la source
3
Autre astuce: si vous exécutez les services $ brew, redémarrez mysql, il nettoiera le fichier plist de LaunchAgents à chaque fois. Si vous voulez persister, modifiez /usr/local/Cellar/mysql/<votreversion>/homebrew.mxcl.mysql.plist - Emma aussi merci beaucoup !!!
LeandroCR
J'ai installé mysql 5.6 en utilisant brew install mysql56et j'ai changé les fichiers ~/Library/LaunchAgents/homebrew.mxcl.mysql56.plistet /usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist. Mais quand je lance mysql mysql.server start, la commande ps montre que le bind-address=127.0.0.1. Y a-t-il d'autres fichiers à modifier?
xi.lin
@ xi.lin Si je comprends bien, mysql.server startcontourne le LaunchAgent, donc il obtient probablement son paramètre ailleurs. Pour utiliser le paramètre dans le plist, vous devez probablement utiliserbrew services restart mysql
Emma Burrows
@EmmaBurrows Utilisation de la brew services restart mysqlsortie Successfully started mysql` (label: homebrew.mxcl.mysql) `mais l'adresse est toujours 127.0.0.1 . En fait, je ne pouvais pas trouver homebrew.mxcl.mysql.plistau lieu d'avoirhomebrew.mxcl.mysql56.plist
xi.lin
1
Pour l'instant, ce n'est plus ainsi que cela fonctionne. La commande utilisée pour exécuter mysqld_safen'a pas bind_address. Au lieu de cela, il est spécifié dans /usr/local/etc/my.cnf.
Timmmm
6

Running a locate my.cnftrouvé le fichier/usr/local/etc/my.cnf

  1. Modifiez ce fichier et définissez bind-address = 0.0.0.0
  2. Redémarrez mysql: brew services restart mysql
Pablo Díaz Ogni
la source
5

J'espère que vous devez créer l'utilisateur pour l'accès à distance avec des '%'caractères génériques et accorder des autorisations sur les bases de données.

Étape 1:

Dans my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) commentez votre adresse de liaison

# bind-address        = xxx.xxx.xxx.xxx

Et redémarrez MySQL Server.

Étape 2:

Ensuite, vous devez accorder des autorisations à l'utilisateur pour l'accès à distance

GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypass';

Veuillez consulter Comment activer la connexion à distance.

Abdul Manaf
la source
J'ai déjà essayé ce paramètre (commentant bind-address) et cela n'a pas fonctionné. J'ai créé un utilisateur et accordé également toutes les autorisations. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
chepukha
Avez-vous un pare-feu en place? Si c'est le cas, désactivez-le.
Abdul Manaf
Oui, je peux accéder au serveur lorsque le pare-feu est désactivé. Mais puis-je configurer le pare-feu pour autoriser l'accès à distance au serveur SQL plutôt que de le désactiver complètement? Sur le serveur, dans les paramètres de pare - feu, j'ai mis mysqld à « autoriser les connexions entrantes »
chepukha
Avez-vous également installé SQL Server sur la même machine?
Abdul Manaf
Oui. Vous voulez dire le serveur SQL et le pare-feu sur la même machine?
chepukha
0

Vérifiez iptables comme iptables -L

Si votre adresse IP n'est pas présente, ajoutez-la

Dans le cas d'Ubuntu ADD IP pour autoriser l'accès:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Priyanka Kariya
la source