So erlauben Sie eine Remote-Verbindung zu MySQL

362

Ich habe MySQL Community Edition 5.5 auf meinem lokalen Computer installiert und möchte Remoteverbindungen zulassen, damit ich eine Verbindung von einer externen Quelle herstellen kann.

Wie kann ich das machen?

Löwe
quelle
1
Mögliches Duplikat von Remote-MySQL-Verbindung aktivieren
Benutzer
1
Wenn Sie DigitalOcean verwenden, können Sie versuchen, es zu verwenden sudo mysql_secure_installation. Zu Ihrer Information.
Alan Dong
Verwenden Sie keine Code-Formatierung für Text, der kein Code ist. Off Topic.
Marquis von Lorne
@EJP warum? ehrliche Frage aus Neugier
René Roth

Antworten:

776

Dies ist unter MySQL standardmäßig zulässig.

Standardmäßig ist der Fernzugriff deaktiviert root. Wenn Sie dies aktivieren möchten, führen Sie diesen SQL-Befehl lokal aus:

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

Und dann finden Sie die folgende Zeile und kommentieren Sie sie in Ihremmy.cnf Datei aus, die normalerweise /etc/mysql/my.cnfauf Unix / OSX-Systemen verwendet wird. In einigen Fällen lautet der Speicherort für die Datei /etc/mysql/mysql.conf.d/mysqld.cnf).

Wenn es sich um ein Windows-System handelt, finden Sie es im MySQL-Installationsverzeichnis, normalerweise so ähnlich C:\Program Files\MySQL\MySQL Server 5.5\ wie der Dateinamemy.ini .

Zeile ändern

 bind-address = 127.0.0.1

zu

 #bind-address = 127.0.0.1

Starten Sie den MySQL-Server ( Unix / OSX und Windows ) neu, damit die Änderungen wirksam werden.

mjuarez
quelle
4
Ok, also habe ich die binnd-address = 127.0.0.1 am Ende der Datei hinzugefügt und versucht, eine Verbindung mit navicat von einem externen Host herzustellen, und ich erhalte den Fehler 10060
Leo
7
Hmm, du musst es nicht hinzufügen. Wie meine Antwort sagte, müssen Sie es auskommentieren, nicht hinzufügen. Es gibt standardmäßig eine, also müssen Sie diese finden und
auskommentieren
7
Hmm, in \ MYsql Server 5.5 \ gibt es nur 1 INI-Datei namens my-default.ini und die einzige Zeile ohne das # lautet: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo
2
Diese Antwort funktioniert perfekt. thnx @mjuarez - GEWÄHRLEISTUNG FÜR ALLE PRIVILEGIEN . TO 'root' @ '%' IDENTIFIZIERT DURCH 'Passwort' MIT GRANT OPTION;
Yadavr
66
Für diejenigen, die nach der my.cnfDatei suchen und keine bind-addressDirektive darin finden, ist zu beachten, dass in meinem Fall (MySQL Version 14.14 unter Ubuntu 16.04.2) der Speicherort für die Datei war/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon
49

Nachdem ich alle oben genannten rootSchritte ausgeführt hatte, konnte ich mich immer noch nicht so remote anmelden , aber Telnetting to Port 3306bestätigte, dass MySQLVerbindungen akzeptiert wurden.

Ich fing an, die Benutzer in MySQL zu untersuchen und bemerkte, dass es mehrere Root-Benutzer mit unterschiedlichen Passwörtern gab.

select user, host, password from mysql.user;

Also habe MySQLich alle Passwörter für root wieder gesetzt und konnte mich endlich remote als anmelden root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;
Matthew Lock
quelle
4
Das ist richtig. Während Sie die Schritte in anderen Antworten ausführen, werden anscheinend Benutzerkonten mit leerem Kennwort erstellt. Sie müssen also Kennwörter für sie hinzufügen.
Chhantyal
1
Ich musste die akzeptierte Antwort mit dieser kombinieren und dann funktionierte alles richtig.
James
8
SQL für 5.7 und höherupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft
Die akzeptierte Antwort legt das Passwort fest und hat für mich funktioniert.
MikeKulls
1
Vielen Dank, ähnlich wie bei @James, ich musste dies mit der akzeptierten Antwort kombinieren, um das Problem zu beheben.
Ben Everard
39

Nur eine Anmerkung aus meiner Erfahrung, finden Sie Konfigurationsdatei unter diesem Pfad /etc/mysql/mysql.conf.d/mysqld.cnf .

(Ich hatte einige Zeit Mühe, diesen Weg zu finden)

Mayur Patel
quelle
1
Dies hängt stark davon ab, welche Distribution Sie verwenden. Der beste Weg ist, einfach danach zu suchen:sudo find /etc -iname 'mysql*.cnf'
Martin Konecny
Ich schätze den Befehl 'find'. Ich bin neu in der Kommandozeile, daher ist es sehr hilfreich. Vielen Dank!
Heres2u
Ich hatte Stunden Mühe, die Datei /etc/mysq/conf.d/mysql.cnf zu bearbeiten, bis ich diese Antwort fand.
Gayan Kavirathne
26

In meinem Fall habe ich versucht, eine Verbindung zu einem Remote-MySQL-Server unter Cent OS herzustellen. Nach vielen Lösungen (Gewähren aller Berechtigungen, Entfernen von IP-Bindungen, Aktivieren des Netzwerks) wurde das Problem immer noch nicht gelöst.

Wie sich herausstellte, stieß ich bei der Suche nach verschiedenen Lösungen auf iptables, wodurch mir klar wurde, dass der MySQL-Port 3306 keine Verbindungen akzeptierte.

Hier ist ein kleiner Hinweis, wie ich dieses Problem überprüft und behoben habe.

  • Überprüfen, ob der Port Verbindungen akzeptiert:
Telnet (MySQL Server IP) [PortNo]
  • Hinzufügen einer IP-Tabellenregel, um Verbindungen am Port zuzulassen:
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
  • Ich würde dies nicht für die Produktionsumgebung empfehlen, aber wenn Ihre iptables nicht richtig konfiguriert sind, kann das Problem durch Hinzufügen der Regeln möglicherweise immer noch nicht behoben werden. In diesem Fall sollte Folgendes durchgeführt werden:
Service Iptables stoppen

Hoffe das hilft.

Kushal
quelle
17

Führen Sie die folgenden Schritte aus, um den Platzhalter-Remotezugriff für MySQL User festzulegen.

(1) Öffnen Sie cmd.

(2) Navigieren Sie zu Pfad C: \ Programme \ MySQL \ MySQL Server 5.X \ bin und führen Sie diesen Befehl aus.

mysql -u root -p

(3) Geben Sie das Root-Passwort ein.

(4) Führen Sie den folgenden Befehl aus, um die Berechtigung bereitzustellen.

GEWÄHREN SIE ALLE PRIVILEGIEN FÜR *. * AUF 'USERNAME' @ 'IP', IDENTIFIZIERT DURCH 'PASSWORD';

USERNAME: Benutzername, den Sie mit dem MySQL-Server verbinden möchten.

IP: Öffentliche IP-Adresse, von der aus Sie den Zugriff auf den MySQL-Server zulassen möchten.

PASSWORT: Passwort des verwendeten Benutzernamens.

IP kann durch% ersetzt werden, damit der Benutzer von jeder IP-Adresse aus eine Verbindung herstellen kann.

(5) Spülen Sie die Vorrechte, indem Sie dem Befehl folgen und beenden.

SPÜLPRIVILEGIEN;

Ausfahrt; oder \ q

Geben Sie hier die Bildbeschreibung ein

Hiren Parghi
quelle
3
Danach wird meinem Root immer noch der Zugriff verweigert. Was habe ich vermisst?
Teapeng
Sie können es im 4. Schritt mit der IP-Adresse Ihres lokalen Systems anstelle von% versuchen. Es sollte funktionieren. % bedeutet eine beliebige IP-Adresse.
Hiren Parghi
6

Wenn Ihr MySQL-Serverprozess nur 127.0.0.1 oder :: 1 abhört, können Sie keine Remoteverbindung herstellen. Wenn Sie eine bind-addressEinstellung in haben/etc/my.cnf haben, kann dies die Ursache des Problems sein.

Sie müssen auch Berechtigungen für einen Nichtbenutzer hinzufügen localhost.

Tadman
quelle
Seltsam, wie könnte Ihr Server neben einer anderen IP "lauschen" 127.0.0.1?
Pacerier
2
@Pacerier 127.0.0.1 ist nur an die Loopback-Schnittstelle gebunden. Externe Verbindungen funktionieren nicht. Ein System verfügt häufig über mehrere Netzwerkschnittstellen, an die jeweils spezifisch gebunden werden muss, oder Sie können die Bind-All-Adresse 0.0.0.0 verwenden.
Tadman
6

Wenn Sie MySQL von dort installiert haben, brewlauscht es standardmäßig nur auf der lokalen Schnittstelle. Um dies zu beheben , die Sie bearbeiten müssen , /usr/local/etc/my.cnfund ändern Sie das bind-addressvon 127.0.0.1zu *.

Dann renne brew services restart mysql.

Timmmm
quelle
1
Für meinen Ubuntu 16.04.4-Server befindet sich die Einstellung für die Bindungsadresse in /etc/mysql/mysql.conf.d/mysqld.cnf
Frank
Hierbei wird nicht nur Brew verwendet, sondern MySQL hat diese Standardeinstellung, um nur lokale Verbindungen zuzulassen.
nivs1978
6

Alle Prozesse für die Remote-Anmeldung. Die Remote-Anmeldung ist standardmäßig deaktiviert. Sie müssen sie manuell für alle IP-Adressen öffnen, um Zugriff auf alle IP-Adressen zu erhalten

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

Spezifische Ip

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

dann

flush privileges;

Sie können Ihren Benutzer Host & Passwort überprüfen

SELECT host,user,authentication_string FROM mysql.user;

Jetzt ist es Ihre Pflicht, dies zu ändern

bind-address = 127.0.0.1

Sie finden dies auf

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

Wenn Sie dies dort nicht finden, versuchen Sie es

sudo nano /etc/mysql/my.cnf

Kommentar in diesem

#bind-address = 127.0.0.1

Starten Sie dann MySQL neu

sudo service mysql restart

Nun viel Spaß beim Remote-Login

albus_severus
quelle
3

Nur zu Ihrer Information Ich habe mir stundenlang die Haare aus diesem Problem gezogen. Schließlich habe ich meinen Hosting-Anbieter angerufen und festgestellt, dass in meinem Fall über einen Cloud-Server, der in der Systemsteuerung für 1 und 1 eine sekundäre Firewall hat, die Sie klonen und einen Port hinzufügen müssen 3306. Einmal hinzugefügt, bin ich direkt reingekommen.

Dan
quelle
Das klingt sehr spezifisch für Ihre Situation. Ich bin keine endlose Wissensquelle zum Thema Netzwerk, aber sind Sie sicher, dass diese Lösung für dieses Problem gut geeignet ist?
Sandy Gifford
2
Ich habe dieses Problem auch gehabt. Gemeinsam mit Cloud-gehosteten Servern,
Matthew Lock
2

Überprüfen Sie, für wen es benötigt wird, ob der Firewall-Port 3306 ebenfalls geöffnet ist, wenn Ihr Firewall-Dienst ausgeführt wird.

Zelkovar
quelle
1

Und für OS X-Benutzer ist zu beachten, dass der Parameter bind-address normalerweise in der launchd-Liste und nicht in der Datei my.ini festgelegt ist. Also in meinem Fall entfernte ich mich <string>--bind-address=127.0.0.1</string>von /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.

tdmartin102
quelle
Alternativer Speicherort für die Plist-Datei:~/Library/LaunchAgents
Dylan Nissley
1

Wenn mysqldeine Bindungsadresse auf eine Loopback- / lokale Adresse festgelegt ist (z. B. 127.0.0.1), ist der Server von Remote-Hosts nicht erreichbar, da eine Loopback-Schnittstelle von keinem Remote-Host aus erreichbar ist.

Setzen Sie diese Option auf 0.0.0.0( ::für IPv4 + 6), um Verbindungen von einem beliebigen Host zu akzeptieren, oder auf eine andere extern erreichbare Adresse, wenn Sie nur Verbindungen auf einer Schnittstelle zulassen möchten.

Quelle

Wesley Smith
quelle
0

Manchmal muss der Name des PCs unter Windows verwendet werden

erster Schritt) in Konfigurationsdatei von MySQL setzen:

mysqld.cnf SET-Bindungsadresse = 0.0.0.0

(um Verbindungen über TCP / IP aufnehmen zu können)

zweiter Schritt) Benutzer in MySQL machen, Tabellenbenutzer, mit dem Namen des PCs auf Windows- Eigenschaften, nicht IP

Geben Sie hier die Bildbeschreibung ein

Rubén Ruíz
quelle
0

Das Aktivieren des Remote-Root-Zugriffs kann gefährlich sein. Es wäre vorzuziehen, wenn Sie Benutzerkonten mit restriktiveren Berechtigungen einrichten würden. Die folgenden drei Schritte sollten dies tun.

  1. Stellen Sie sicher, dass die Zeile, die mit beginnt, bind-address ...mindestens in Ihrer Datei my.ini oder my.cnf auskommentiert ist. Wenn es nicht existiert, fahren Sie fort. Sie finden diese Datei C:\ProgramData\MySQL\MySQL Server 8.0unter Windows.

  2. Überprüfen Sie anschließend, ob das Benutzerkonto, mit dem Sie die Verbindung herstellen, localhostim Feld "Auf Hosts beschränken" nicht vorhanden ist. Obwohl dies nicht empfohlen wird, können Sie %dieses Feld stattdessen zu Testzwecken eingeben. Sie können dies tun, indem Sie mit MySQL Workbench eine lokale Verbindung zum Server herstellen, dann in der Menüleiste zu Server> Benutzer und Berechtigungen gehen und das Benutzerkonto suchen, mit dem Sie eine Verbindung herstellen möchten.

Das Feld "Limit to Hosts Matching" verhindert, dass Sie eine nicht lokale Verbindung herstellen. Das heißt, es begrenzt die akzeptierten Verbindungen auf ein Muster von IP-Adressen. Idealerweise sollten Sie über eine statische IP-Adresse oder ein statisches Subnetz auf den MySQL-Server zugreifen, damit Sie so restriktiv wie möglich sind.

  1. Natürlich sollte Ihre Firewall es der MySQL Server-Anwendung ermöglichen, über den gewünschten Port zu kommunizieren. Die physischen Netzwerkgeräte zwischen Ihnen und Ihrem Server sollten die Kommunikation über den Port ermöglichen, mit dem Sie eine Verbindung herstellen möchten. (Port 3306 normalerweise)
Nikola Petrovic
quelle