wake-up-neo.com

Wie verbinde ich die MySQL-Workbench, um MySQL im Docker auszuführen?

Ich verwende MySQL-Server in Docker-Container und kann innerhalb von Docker zugreifen. So erstellen Sie eine Verbindung in MySQL-Workbench, die auf meinem lokalen Computer (Host-Computer) ausgeführt wird. 

23
Pawan Kumar

Sie müssen nur wenige Einstellungen in Ihrem Docker-Container vornehmen. Bitte folgen Sie den folgenden Schritten. 

  1. Geben Sie den MySQL-Konfigurationsblock in Ihrer docker-compose.yml an. Ich habe den folgenden mysql-Block unter services in meiner Datei docker-compose.yml.

    services:
        db:
            image: mysql
            volumes:
                - "./.data/db:/var/lib/mysql"
            environment:
                MYSQL_ROOT_PASSWORD: root
                MYSQL_DATABASE: mydb
                MYSQL_USER: user
                MYSQL_PASSWORD: pass
            ports:
                42333:3306
    
  2. Starten Sie den Docker-Container neu und führen Sie die folgenden Befehle aus, um zur bash-Shell im mysql-Container zu gelangen

    docker ps
    docker exec -it <mysql container name> /bin/bash 
    

    Um innerhalb des Containers eine Verbindung zum mysql-Befehlszeilentyp herzustellen,

    mysql -u root -p
    

    Verwenden Sie MYSQL_ROOT_PASSWORD wie in der Docker-Compose.yml angegeben. Führen Sie die folgenden Befehle aus, um einen neuen Benutzer zu erstellen.

    create user 'user'@'%' identified by 'pass';
    grant all privileges on *.* to 'user'@'%' with grant option;
    flush privileges;
    

    Das Prozentzeichen (%) bedeutet alle IP's. Starten Sie den Docker-Container neu.

  3. Geben Sie in Ihrer MySQL Workbench die Verbindungsdetails an. Verwenden Sie MYSQL_PASSWORD wie in Ihrer docker-compose.yml-Datei angegeben. 

     enter image description here

Sie sollten jetzt in der Lage sein, eine Verbindung zu Ihrem mysql-Container herzustellen. 

15
Krishna

2 Bedingungen für den Hafenbetrieb: 

  • zunächst muss Ihr Docker-Lauf den Mysql-Port einem Host-Port zuordnen: 

    docker run -p Host:container
    

(zum Beispiel: docker run -d -p 3306:3306 tutum/mysql)

  • zweitens: Wenn Sie Docker in einem VM (Docker-Computer mit boot2docker) verwenden, müssen Sie die IP-Adresse von docker-machine ip <VMname> mit dem vom Host zugewiesenen Port verwenden.

    http://$(docker-machine ip <VMname>):hostPort
    

Wenn Sie localhost verwenden müssen, müssen Sie einige Portweiterleitungen auf der Ebene der VirtualBox durchführen :

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"

(controlvm Wenn der VM ausgeführt wird, ist modifyvm der VM ist gestoppt.) (Ersetzen Sie "boot2docker-vm" durch den Namen Ihrer virtuellen Maschine: siehe docker-machine ls


2 MySQL-bezogene Bedingungen:

  • Wie in nkratzke/EasyMySQL/Dockerfile dargestellt, müssen Sie den Fernzugriff aktivieren:

    # Enable remote access (default is localhost only, we change this
    # otherwise our database would not be reachable from outside the container)
    RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
    
  • Sie müssen Benutzer erstellen, wenn Sie Ihre Datenbank in Ihrem Docker-Image starten.
    Siehe zum Beispiel nkratzke/EasyMySQL/start-database.sh , das vom Dockerfile CMD aufgerufen wird.

    /usr/sbin/mysqld &
    sleep 5
    echo "Creating user"
    echo "CREATE USER '$user' IDENTIFIED BY '$password'" | mysql --default-character-set=utf8
    echo "REVOKE ALL PRIVILEGES ON *.* FROM '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "GRANT SELECT ON *.* TO '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "finished"
    
13
VonC

Nach der Bereitstellung hat MySQL standardmäßig folgende Verbindungseinschränkungen:

mysql> select Host, user from mysql.user;
+-----------+---------------+
| Host      | user          |
+-----------+---------------+
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
4 rows in set (0.00 sec)

Offensichtlich können Sie aus Sicherheitsgründen keine Verbindung außerhalb des Docker-Images herstellen. Wenn Sie dies ändern müssen, damit root von jedem Host aus eine Verbindung herstellen kann (beispielsweise zu Entwicklungszwecken), führen Sie folgende Schritte aus:

  1. Starten Sie Ihr MySQL-Image mit allen erforderlichen Portzuordnungen:

    docker run -p 3306:3306 --name=mysql57 -d mysql/mysql-server:5.7

oder, wenn die vollständige Portzuordnung erforderlich ist:

docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
  1. Wenn dies die Neuinstallation ist, greifen Sie zum Standardkennwort:

    docker logs mysql57 2>&1 | grep GENERATED

  2. Verbinden Sie sich mit mysql client direkt mit der mysqld im Docker:

    docker exec -it mysql57 mysql -uroot -p

  3. Bei dieser Neuinstallation werden Sie aufgefordert, das Kennwort mit dem Befehl ALTER USER zu ändern. TU es.

  4. SQL ausführen:

    update mysql.user set Host = '%' where user='root';

  5. Beenden Sie den mysql-Client.

  6. Starten Sie den Container neu:

    docker restart mysql57

Jetzt können Sie von MySQL Workbench aus eine Verbindung herstellen

Host: `0.0.0.0` 
port: `3306`

Nach allen Änderungen zeigt die Abfrage:

select Host, user from mysql.user;
+-----------+---------------+
| Host      | user          |
+-----------+---------------+
| %         | root          |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
+-----------+---------------+
5

Angenommen, Sie haben den nächsten Inhalt Ihrer docker-compose-Datei:

database: image: mysql:5.6 volumes: - dbdata:/var/lib/mysql environment: - "MYSQL_DATABASE=Homestead" - "MYSQL_USER=Homestead" - "MYSQL_PASSWORD=secret" - "MYSQL_ROOT_PASSWORD=secret" ports: - "33061:3306"

Für localhost verwenden Sie einfach Host 127.0.0.1 und 33061 port  enter image description here

3
Deadpool

@ Krishnas Antwort hat funktioniert, aber mit einer kleinen Änderung - Benutzer wurde wie folgt hinzugefügt

create user 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

siehe Authentifizierungs-Plugin 'caching_sha2_password' kann nicht geladen werden

2
andrew

Ich habe eine Lösung dafür gefunden, indem ich den Feldwert inHostname: 127.0.0.1 (Localhost), Port standardmäßig 3306 mit Ihren Creds eingestellt habe.

1
Pawan Kumar
  1. Geben Sie Ihre Konfiguration docker-compose.yml an. Weitere Details hier . Beispiel:

    version: '3.1'
    
    services:
      mysql:
        image: mysql:5.6
        container_name: test-mysql
        ports:
          - 3306:3306
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
    
  2. Führen Sie diese Befehle docker-compose up und ein anderes Terminal docker ps aus, um Ihren Container anzuzeigen.
  3. Greifen Sie auf Ihr Docker zu: docker exec -it test-mysql bash
  4. Führen Sie in dem Container mysql -u root -p aus, um eine Verbindung zum Befehlszeilentyp mysql herzustellen.
  5. Neuen Benutzer anlegen
  6. Konfigurieren Sie schließlich Ihre MySQL Workbench

enter image description here

0
DNick

Ich folgte den Anweisungen in mysql docker hub . Schrieb diese docker-compose.yml

version: '3.1'

services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: example
    ports:
      - 3306:3306

Wechseln Sie zur MySQL-Workbench, wenn Sie eine Verbindung herstellen. jetzt Passwort eingeben (in meinem Fall example)

0
user5848619

Sie müssen die Host-/Gast-IP auf 0.0.0.0 Und den Host-/Gast-Port auf 3306 Unter "Einstellungen-> Netzwerk-> Portweiterleitung" konfigurieren.

0
Luiz Soto