Detaillierte Konfiguration des mysql8.x-Docker-Remotezugriffs

Detaillierte Konfiguration des mysql8.x-Docker-Remotezugriffs

Umweltbedingungen

MySQL 8.x wird über Docker bereitgestellt und die Startdatei docker-compose.yml lautet wie folgt:

Version: "3.2"
Leistungen:
    MySQL:
        Containername: MySQL
        Bild: "mysql:8.0"
        Häfen:
            - „3306:3306“
        Befehl:
            [
                "--character-set-server=utf8mb4",
                „--collation-server=utf8mb4_unicode_ci“,
                "--sql_mode=STRICT_TRANS_TABLES,KEIN_NULLDATUM,FEHLER_FÜR_DIVISION_DURCH_NULL,KEINE_ENGINE_SUBSTITUTION",
            ]
        Bände:
            - Typ: binden
              Quelle: ./mysql
              Ziel: /var/lib/mysql
            - Typ: binden
              Quelle: ./mysql-docker.cnf
              Ziel: /etc/mysql/conf.d/docker.cnf
        Umfeld:
            - MYSQL_RANDOM_ROOT_PASSWORD=ja
            -MYSQL_USER=meinBenutzer
            -MYSQL_PASSWORD=meinPasswort
            -MYSQL_DATABASE=meineDatenbank
        Neustart: immer

Wenn Sie den Befehl „Docker-Compose“ zum ersten Mal starten, wird das MySQL 8.x-Image automatisch heruntergeladen.

Nach dem erfolgreichen Start können Sie sehen, dass auch Port 3306 zugeordnet ist.

An diesem Punkt ist MySQL normal installiert und gestartet.​

Aufgetretene Fehler

Als nächstes stellte sich heraus, dass beim Herstellen einer Verbindung zum MySQL-Server über einen Datenbank-Client wie Navicat überhaupt keine Verbindung hergestellt werden konnte. Folgende Fehlertypen traten auf:

  1. FEHLER 1045 (28000): Zugriff für Benutzer „myuser“ verweigert
  2. 10060 Fehler
  3. 10061 Fehler

Problemumgehung

Es gibt im Internet viele Methoden, um das Problem des Fernzugriffs durch das Festlegen von Datenbankbenutzerberechtigungen zu lösen, aber sie verfügen nur über die Kernschritte und es fehlt der Prozess.

1. Melden Sie sich beim MySQL-Docker an

Wie aus der obigen Datei docker-compose.yml ersichtlich ist, ist das Kennwort des MySQL-Root-Benutzers nicht konfiguriert.
Im Abschnitt zur Volume-Zuordnung können Sie sehen, dass wir die Datei /etc/mysql/conf.d/docker.cnf im Container nach außen zugeordnet haben. Der Inhalt dieser Datei ist wie folgt:

[mysqld]
Host-Cache überspringen
Namensauflösung überspringen

Fügen Sie die folgende Zeile hinzu, sodass für die Anmeldung bei MySQL kein Kennwort erforderlich ist.

[mysqld]
Host-Cache überspringen
Namensauflösung überspringen
Skip-Grant-Tabellen

Starten Sie den Container nach dem Hinzufügen neu.

Docker-Compose nach unten
docker-compose up -d

2. Legen Sie das Root-Passwort fest

Betreten Sie den Container und melden Sie sich mit dem Root-Account beim MySQL-Server an.

docker exec -it mysql /bin/bash
mysql -uroot # Drücken Sie hier die Eingabetaste, um sich ohne Eingabe eines Kennworts beim Server anzumelden. mysql> flush privileges;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> ALTER USER 'root'@'localhost' IDENTIFIZIERT MIT mysql_native_password DURCH 'mysqlroot';
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Beachten Sie, dass Sie zuerst die Berechtigungen löschen müssen. Andernfalls schlägt die Kennwortänderung fehl.​

Beenden Sie dann den Container und stellen Sie die zugeordnete Datei /etc/mysql/conf.d/docker.cnf wieder her.

[mysqld]
Host-Cache überspringen
Namensauflösung überspringen

Löschen Sie die neu hinzugefügte Zeile und starten Sie den Container neu.

Docker-Compose nach unten
docker-compose up -d

3. Richten Sie Root-Remotezugriffsberechtigungen ein

Nachdem Sie den Container neu gestartet haben, betreten Sie ihn erneut und legen Sie die Remote-Zugriffsberechtigungen für den Root-Benutzer fest.

docker exec -it mysql /bin/bash
mysql -uroot -p # Sie müssen das im vorherigen Schritt konfigurierte Passwort mysqlroot eingeben

mysql> ALTER USER 'root'@'%' IDENTIFIZIERT MIT mysql_native_password DURCH 'mysqlroot';
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Konfigurieren Sie die Remote-Zugriffsberechtigungen mit „root“@„%“ anstelle von „root“@„localhost“ im vorherigen Schritt.

Nach der Einstellung können Sie mit Navicat eine Verbindung herstellen, ohne den MySQL-Docker-Container neu zu starten.

4. Richten Sie den Fernzugriff für den normalen Benutzer myuser ein

Befolgen Sie die obigen Schritte, um die Remote-Verbindung für den normalen Benutzer myuser zu konfigurieren.

mysql> ALTER USER 'myuser'@'%' IDENTIFIZIERT MIT mysql_native_password DURCH 'mypass';
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> gewähre 'myuser'@'%' alle Privilegien für *.* mit der Grant-Option;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

Wenn die Einstellung erfolgreich ist, kann das MyUser-Konto auch eine Remoteverbindung über Navicat herstellen.

Dies ist das Ende dieses Artikels über die detaillierte Konfiguration des mysql8.x-Docker-Fernzugriffs. Weitere relevante Inhalte zum mysql8.x-Docker-Fernzugriff finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Docker stellt eine MySQL-Remoteverbindung bereit, um 2003-Probleme zu lösen
  • Tutorial zur Installation von MySQL mit Docker und zur Implementierung einer Remote-Verbindung
  • Docker stellt MySQL bereit, um Beispielcode für eine Remoteverbindung zu erreichen

<<:  HTML + CSS + JS-Beispielcode zur Nachahmung des Helligkeitsanpassungseffekts von Win10

>>:  Wie wählt man das perfekte Aloe Vera Gel aus? Perfektes Aloe Vera Gel – So erkennen Sie Echtheit und Fälschung

Artikel empfehlen

my.cnf (my.ini) wichtige Parameteroptimierungs-Konfigurationsanweisungen

MyISAM-Speicher-Engine Die MyISAM-Speicher-Engine...

Schritte zum Bereitstellen von Ingress-Nginx auf K8s

Inhaltsverzeichnis Vorwort 1. Bereitstellung und ...

Zusammenfassung der Verwendung von setTimeout() in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. Der Unterschi...

So konfigurieren Sie einen Pfadalias für das React-Scaffolding

Die React-Version beim Schreiben dieses Artikels ...

So beheben Sie den Startfehler des Docker-Containers

Frage: Nach dem Neustart des Computers kann der M...

JavaScript implementiert Konstellationsabfragefunktion mit detailliertem Code

Inhaltsverzeichnis 1. Titel 2. Code 3. Ergebnisse...

TCP-Socket-SYN-Warteschlange und Accept-Warteschlangen-Unterschiedsanalyse

Zunächst müssen wir verstehen, dass ein TCP-Socke...

Grundkenntnisse der MySQL-Datenbank

Inhaltsverzeichnis 1. Datenbanken verstehen 1.1 D...

Tutorial zu HTML-Tabellen-Tags (11): Horizontales Ausrichtungsattribut ALIGN

In horizontaler Richtung können Sie die Ausrichtu...

Über das Problem beim Schreiben von Plugins zum Mounten von DOM in vue3

Im Vergleich zu vue2 verfügt vue3 über ein zusätz...

CSS verwendet die BEM-Namenskonvention

Welche Informationen möchten Sie erhalten, wenn S...