Ich habe den MySQL-Server auf einem Remote-Ubuntu-Computer installiert. Der root
Benutzer wird in der mysql.user
Tabelle folgendermaßen definiert :
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 |
+------------------+------+-------------------------------------------+
Ich kann mit dem Benutzer root
über dieselbe Befehlszeilenschnittstelle des Remotecomputers mit dem Standardclient zugreifen mysql
. Jetzt möchte ich Root-Zugriff von jedem Host im Internet zulassen , daher habe ich versucht, die folgende Zeile hinzuzufügen (es ist ein genaues Duplikat der ersten Zeile aus dem vorherigen Speicherauszug, mit Ausnahme der host
Spalte):
mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host | user | password |
+------------------+------+-------------------------------------------+
| % | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Aber mein Client auf meinem PC sagt mir weiterhin (ich habe die Server-IP verdeckt):
SQL-Fehler (2003): Es kann keine Verbindung zum MySQL-Server unter '46 .xxx '(10061) hergestellt werden.
Ich kann nicht sagen, ob es sich um einen Authentifizierungsfehler oder einen Netzwerkfehler handelt. Auf der Server-Firewall habe ich Port 3306 / TCP für 0.0.0.0/0 aktiviert , und das ist für mich in Ordnung ...
quelle
bind-address
in my.cnfAntworten:
Es gibt zwei Schritte in diesem Prozess:
a) Gewähren Sie Privilegien. Führen Sie als Root-Benutzer Folgendes aus, indem Sie
'password'
Ihr aktuelles Root-Passwort ersetzen :b) an alle Adressen binden:
Am einfachsten ist es , die Zeile in Ihrer
my.cnf
Datei zu kommentieren :und starte mysql neu
Standardmäßig wird es nur an localhost gebunden. Wenn Sie jedoch die Zeile kommentieren, wird es an alle gefundenen Schnittstellen gebunden. Das Auskommentieren der Zeile entspricht
bind-address=*
.Um zu überprüfen, wo der MySQL-Dienst gebunden ist, führen Sie ihn als root aus:
Update für Ubuntu 16:
Konfigurationsdatei ist (jetzt)
(zumindest unter Standard Ubuntu 16)
quelle
USE mysql; UPDATE user SET Grant_priv='Y' WHERE user='root';
Führen Sie die folgende Abfrage aus:
use mysql;
update user set host='%' where host='localhost'
HINWEIS: Nicht für die Produktion empfohlen.
quelle
update mysql.user set host='%' where user='root'
Manchmal
sollte sein
quelle
MYSQL 8.0 - Öffnen Sie den MySQL-Befehlszeilenclient.
GEWÄHREN SIE ALLE PRIVILEGIEN AUF *. * TO 'root' @ 'localhost';
benutze mysql
UPDATE mysql.user SET host = '%' WHERE user = 'root';
Starten Sie den MySQL-Dienst neu
quelle
MariaDB läuft auf Raspbian - die Datei mit der Bindeadresse ist schwer zu lokalisieren. MariaDB hat einige nicht sehr hilfreiche Informationen zu diesem Thema.
ich benutzte
um herauszufinden, wo das verdammte Ding ist.
Ich musste auch die Privilegien und Hosts in der MySQL festlegen, wie alle oben genannten.
Und hatte auch Spaß daran, den 3306-Port für Remote-Verbindungen zu meinem Raspberry Pi zu öffnen - endlich verwendet iptables-persistent .
Alles funktioniert jetzt großartig.
quelle
Wenn an Ihr Betriebssystem viele Netzwerke angeschlossen sind, müssen Sie eines dieser Netzwerke in den Bind-Adressen der Datei my.conf angeben. ein Beispiel:
Diese IP stammt aus einer ethX-Konfiguration.
quelle
In meinem Fall war die Einstellung "Bindungsadresse" das Problem. Das Kommentieren dieser Einstellung in
my.cnf
hat nicht geholfen, da mysql in meinem Fall aus irgendeinem Grund den Standardwert auf 127.0.0.1 gesetzt hat.Öffnen Sie die Befehlszeile in Ihrer lokalen Box, um zu überprüfen, welche Einstellung MySql derzeit verwendet:
Lesen Sie die aktuelle Einstellung vor:
Hier sollte 0.0.0.0 angezeigt werden, wenn Sie den Zugriff von allen Hosts zulassen möchten. Ist dies nicht der Fall, bearbeiten Sie Ihre
/etc/mysql/my.cnf
und legen Sie die Bindungsadresse im Abschnitt [mysqld] fest:Starten Sie schließlich Ihren MySQL-Server neu, um die neue Einstellung zu übernehmen:
Versuchen Sie es erneut und prüfen Sie, ob die neue Einstellung übernommen wurde.
quelle
mysql_update
ist was du brauchst.Ich weiß nicht, warum jemand die komplexeren Methoden zur Behebung dieses Problems befolgen würde, wenn MySql freundlicherweise ein Tool erstellt hat, das dies bereits tut ...
quelle