Kein Remotezugriff auf MySQL-Server unter Mac OS X.


11

Auf meinem Arbeitscomputer läuft ein MySQL-Server, auf dem Mac OS X Maverick ausgeführt wird. Ich möchte vom Heimcomputer darauf zugreifen, der auch Mac OS Maverick hat.

Wenn ich vom Terminal aus in einem Tab ssh in meinen Arbeitscomputer ssh und die ssh-Sitzung dort sitzen lasse, ohne untätig zu sein, kann ich auf einem anderen Tab auf den MySQL-Server zugreifen.

Ohne die ssh-Sitzung wird jedoch der folgende Fehler angezeigt

FEHLER 2003 (HY000): Unter 'SERVER_IP_ADDRESS' (60) kann keine Verbindung zum MySQL-Server hergestellt werden.

Ich habe versucht, die my.cnfDatei auf dem Server zu ändern, indem ich die Bindeadresse auskommentierte oder ihr zuwies, 0.0.0.0aber es funktioniert nicht.

Warum ist es so? Wie kann ich den Server so konfigurieren, dass er Remotezugriff ermöglicht, ohne ssh auf dem Client ausführen zu müssen? Kann mir bitte jemand helfen?


Ich habe das gleiche Problem mit PostGIS unter Remote OS X ... kann eine Verbindung zur Datenbank herstellen, wenn sshes auf einer Registerkarte geöffnet ist, ansonsten jedoch nicht. Ich denke, das Problem ist, dass der Datenbankserverprozess angehalten wird oder nicht ausgeführt wird, wenn ich nicht am Remoteserver angemeldet bin.
Andybega

Antworten:


20

Ich habe heute unter OSX Yosemite mit MySQL 5.7, das kürzlich mit Homebrew aktualisiert wurde, gegen diesen Fehler gekämpft. Nach Vorschlägen zu StackOverflow und anderswo habe ich nach my.cnfDateien gesucht, die alle angegeben wurden bind-address=0.0.0.0. Ich habe MySQL sogar gemäß diesen Anweisungen entfernt und neu installiert und dann mit neu installiert brew install mysql. Noch keine Remoteverbindungen erlaubt.

Erst als ich lief ps -ax | grep mysqlund bemerkte, dass die Bindeadresse im Startbefehl übergeben wurde (wodurch alle my.cnfDateien überschrieben wurden ), grub ich weiter und stellte fest, dass Homebrew MySQL standardmäßig an 127.0.0.1 bindet .

Bearbeiten, ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistum Änderungen vorzunehmen, um mein Problem --bind-address=127.0.0.1zu --bind-address=0.0.0.0lösen (letztere sollten in eine bestimmte IP-Adresse geändert werden, wenn dies nicht nur eine Entwicklungsmaschine ist).

Ich bin der Meinung, dass dies eine wichtige Information ist, die in den meisten von mir konsultierten Ressourcen fehlte. Hoffentlich hilft das Posten hier jemand anderem!

BEARBEITEN : Wie LeandroCR in den Kommentaren angegeben hat, brew services restart mysqlüberschreibt das Ausführen die plist-Datei in LaunchAgents mit der Standarddatei, was dazu führt, dass MySQL Verbindungen auf mysteriöse Weise wieder ablehnt. Ein besserer Rat als das, was ich ursprünglich geschrieben habe, ist der folgende:

  1. Bearbeiten /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plistund ersetzen --bind-address=127.0.0.1mit bind-address=*oder --bind-address=0.0.0.0( siehe MySQL - Dokumentation auf bind-Adresse )
  2. Starten Sie MySQL mit neu brew services restart mysql

Dann sollte MySQL von nun an weiterhin nicht lokale Verbindungen akzeptieren - bis Sie es vermutlich neu installieren.

Bearbeiten (Sep 2019) Timothy Zorn weist darauf hin, dass dieses Problem bei MySQL 8.x, das über Homebrew installiert und ausgeführt wird, nicht mehr auftritt. Daher ist meine Antwort aus dem Jahr 2016 möglicherweise nur für 5.x relevant.


3
Ein weiterer Tipp: Wenn Sie $ Brew Services ausführen und mysql neu starten, wird die plist-Datei jedes Mal von LaunchAgents bereinigt. Wenn Sie diese Änderung beibehalten möchten, bearbeiten Sie /usr/local/Cellar/mysql/<IhreVersion>/homebrew.mxcl.mysql.plist - Auch Emma, ​​vielen Dank !!!
LeandroCR

Ich habe MySQL 5.6 mit installiert und die Dateien brew install mysql56und geändert . Aber immer noch, wenn ich mysql durch starte , zeigt der Befehl ps, dass die . Gibt es noch andere Dateien zum Bearbeiten? ~/Library/LaunchAgents/homebrew.mxcl.mysql56.plist/usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plistmysql.server startbind-address=127.0.0.1
xi.lin

@ xi.lin Umgeht nach meinem Verständnis mysql.server startden LaunchAgent, sodass er seine Einstellung wahrscheinlich von einem anderen Ort erhält. Um die Einstellung in der zu verwenden plist, müssen Sie wahrscheinlichbrew services restart mysql
Emma Burrows

@EmmaBurrows Verwenden der brew services restart mysqlAusgabe Successfully started mysql` (Bezeichnung: homebrew.mxcl.mysql) `, aber die Adresse ist immer noch 127.0.0.1 . Eigentlich konnte ich nicht finden, homebrew.mxcl.mysql.plistanstatthomebrew.mxcl.mysql56.plist
xi.lin

1
Ab sofort funktioniert das nicht mehr so. Der Befehl, der mysqld_safefür mich ausgeführt wurde, hat keine bind_address. Stattdessen wird es in angegeben /usr/local/etc/my.cnf.
Timmmm

6

Beim Ausführen wurde locate my.cnfdie Datei gefunden/usr/local/etc/my.cnf

  1. Bearbeiten Sie diese Datei und legen Sie sie fest bind-address = 0.0.0.0
  2. Starten Sie MySQL neu: brew services restart mysql

5

Ich hoffe, Sie müssen den Benutzer für den Remotezugriff mit '%'Platzhalter erstellen und Berechtigungen für DBs erteilen.

Schritt 1:

Kommentieren Sie in my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) Ihre Bindungsadresse aus

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

Und starten Sie MySQL Server neu.

Schritt 2:

Anschließend müssen Sie dem Benutzer Berechtigungen für den Remotezugriff erteilen

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

Weitere Informationen finden Sie unter Aktivieren der Remoteverbindung.


Ich habe diese Einstellung (Bindeadresse auskommentieren) schon einmal ausprobiert und sie hat nicht funktioniert. Ich habe einen Benutzer erstellt und auch alle Berechtigungen erteilt. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
Chepukha

Haben Sie eine Firewall? Wenn ja, deaktivieren Sie das bitte.
Abdul Manaf

Ja, ich kann auf den Server zugreifen, wenn die Firewall ausgeschaltet ist. Aber kann ich die Firewall so konfigurieren, dass der Remotezugriff auf den SQL Server möglich ist, anstatt sie vollständig auszuschalten? Auf dem Server habe ich in den Firewall-Einstellungen mysqld so eingestellt , dass "eingehende Verbindungen zulassen"
chepukha

Haben Sie SQL Server auch auf demselben Computer installiert?
Abdul Manaf

Ja, ich will. Sie meinen SQL Server und Firewall auf demselben Computer?
Chepukha

0

Überprüfen Sie iptables als iptables -L

Wenn Ihre IP nicht vorhanden ist, fügen Sie sie hinzu

Im Falle von Ubuntu ADD IP, um den Zugriff zu ermöglichen:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.