it-roy-ru.com

Как подключить MySQL Workbench для запуска MySQL в Docker?

Я использую MySQL сервер внутри Docker контейнера и могу получить доступ внутри Docker. Как создать соединение в MySQL, работающем на моем локальном компьютере (Host Machine). 

23
Pawan Kumar

Вы должны сделать несколько настроек в вашем контейнере Docker. Пожалуйста, выполните следующие шаги. 

  1. Укажите блок конфигурации mysql в вашем docker-compose.yml. У меня есть следующий блок mysql в объекте services в моем файле 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. Перезапустите Docker-контейнер и выполните следующие команды, чтобы перейти в оболочку bash в MySQL-контейнере.

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

    Внутри контейнера для подключения к типу командной строки mysql,

    mysql -u root -p
    

    Используйте MYSQL_ROOT_PASSWORD, как указано в docker-compose.yml. Выполните следующие команды, чтобы создать нового пользователя.

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

    Знак процента (%) означает все ip. Перезапустите докер-контейнер.

  3. В вашем MySQL Workbench укажите детали подключения. Используйте MYSQL_PASSWORD, как указано в файле docker-compose.yml. 

     enter image description here

Теперь вы должны иметь возможность подключиться к вашему контейнеру mysql. 

15
Krishna

2 связанных с докером условия: 

  • во-первых, ваш запуск Docker должен сопоставить порт mysql с портом хоста: 

    docker run -p Host:container
    

(например: docker run -d -p 3306:3306 tutum/mysql)

  • во-вторых, если вы используете docker в VM (docker-machine, с boot2docker), вам нужно использовать ip docker-machine ip <VMname> с портом, сопоставленным с хостом.

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

Если вам нужно использовать localhost, вам нужно сделать некоторую переадресацию портов на уровне VirtualBox :

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

(controlvm, если VM работает, modifyvm означает, что VM остановлен) (замените «boot2docker-vm» именем вашего виртуального компьютера: см. docker-machine ls


2 связанных с MySQL условия:

  • Как показано в nkratzke/EasyMySQL/Dockerfile , вам необходимо включить удаленный доступ:

    # 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
    
  • Вам нужно создавать пользователей при старте вашей базы данных в вашем образе докера.
    Смотрите, например, nkratzke/EasyMySQL/start-database.sh , который вызывается Dockerfile CMD :

    /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

По умолчанию после развертывания MySQL имеет следующие ограничения подключения:

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)

По-видимому, в целях безопасности вы не сможете подключиться к нему за пределами образа докера . Если вам нужно изменить его, чтобы разрешить root-подключение с любого хоста (скажем, в целях разработки), выполните:

  1. Запустите свой образ mysql со всеми необходимыми сопоставлениями портов:

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

или, если требуется полное сопоставление портов:

docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
  1. Если это новая установка - захватите пароль по умолчанию:

    docker logs mysql57 2>&1 | grep GENERATED

  2. Подключитесь с помощью клиента mysql напрямую к mysqld в docker:

    docker exec -it mysql57 mysql -uroot -p

  3. Если это новая установка, вам будет предложено изменить пароль с помощью команды ALTER USER. Сделай это.

  4. Запустите SQL:

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

  5. Выйдите из клиента mysql.

  6. Перезапустите контейнер:

    docker restart mysql57

Теперь вы сможете подключиться из MySQL Workbench к

Host: `0.0.0.0` 
port: `3306`

После всех изменений запрос покажет:

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

Предположим, у вас есть следующее содержимое вашего файла docker-compose:

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"

Для локального хоста просто используйте хост 127.0.0.1 и порт 33061  enter image description here

3
Deadpool

Ответ @ Кришны сработал, но с небольшим изменением - пользователь был добавлен следующим образом

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

см. Плагин аутентификации caching_sha2_password не может быть загружен

2
andrew

Я получил решение для этого, установив значение поля вHostname: 127.0.0.1 (Localhost), порт по умолчанию 3306 с вашими кредитами.

1
Pawan Kumar
  1. Укажите свою конфигурацию docker-compose.yml. Подробнее здесь . Пример:

    version: '3.1'
    
    services:
      mysql:
        image: mysql:5.6
        container_name: test-mysql
        ports:
          - 3306:3306
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
    
  2. Запустите эту команду docker-compose up, а другой терминал - docker ps, чтобы увидеть ваш контейнер.
  3. Войдите в свой докер: docker exec -it test-mysql bash
  4. Внутри контейнера, чтобы подключиться к типу командной строки mysql, запустите mysql -u root -p.
  5. Создать нового пользователя
  6. Наконец, настройте свой MySQL Workbench

 enter image description here

0
DNick

Я следовал инструкциям, показанным в mysql docker hub . Написал этот 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

Перейдите в MySQL Workbench, когда вы устанавливаете соединение, убедитесь, что очистили пароль в параметрах. Теперь введите пароль (в моем случае example)

0
user5848619