Установка и использование MySQL в Docker + подключение из DBeaver

MySQL — одна из самых популярных реляционных баз данных, которая широко используется для хранения и управления данными. Если вы хотите изучать MySQL без установки её напрямую на вашу систему, Docker предоставляет отличный способ изолировать среду.

В этой статье мы разберём, как установить и запустить MySQL в контейнере Docker, а также как подключиться к ней с помощью графического клиента DBeaver. Это позволит вам экспериментировать с базой данных в изолированной среде, не затрагивая основную ОС.

Преимущества использования MySQL в Docker

  • Изоляция: MySQL работает в контейнере, не затрагивая основную систему
  • Простота управления: Легко обновлять версии и управлять конфигурацией
  • Переносимость: Контейнер можно легко перенести на другую машину
  • Чистота системы: Не остается следов в системе после удаления контейнера

Я предполагаю, что у вас уже установлен Docker. Если нет, скачайте и установите его с официального сайта.

Чтобы проверить установлен ли у вас Докер, выполните следующую команду в терминале:

docker --version

Пример вывода:

Docker version 28.3.3, build 980b856

Если такая команда не найдена, то перейдите на официальный сайт Докер https://www.docker.com/get-started и установите его следую инструкциям для своей операционной системы.

Запуск MySQL в контейнере

Создадим и запустим контейнер с MySQL. Для этого выполните в терминале команду:

docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:8.0.43

Разберем параметры:

ПараметрОписание
--name mysql-serverИмя контейнера, чтобы было удобно к нему обращаться
-e MYSQL_ROOT_PASSWORD=my_passwordЗадает пароль для пользователя root
-p 3306:3306Пробрасывает порт из контейнера на ваш компьютер
-dЗапускает контейнер в фоновом режиме
mysql:8.0.43Используется официальный образ MySQL версии 8.0.43

Если вы хотите загрузить последнюю версию образа, то следует указывать тег mysql:latest

Проверим, запущен ли контейнер:

docker ps

Вы должны увидеть строку вроде:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS                                                    NAMES
55f1b68f12af   mysql:8.0.43   "docker-entrypoint.s…"   13 seconds ago   Up 9 seconds   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   mysql-server

Проверка работы MySQL из командной строки

Можно подключиться к контейнеру и запустить MySQL напрямую:

docker exec -it mysql-server mysql -uroot -p

Введите пароль (в нашем случае my_password) и вы попадете в консоль MySQL:

mysql> SHOW DATABASES;

Если видите список баз (information_schemamysqlperformance_schema), всё работает ✅

Хранение данных вне контейнера (важно!)

По умолчанию, если удалить контейнер — удалятся и все данные. Чтобы этого избежать, нужно использовать Docker Volume.

Что происходит, если мы создали контейнер без флага -v

Когда мы выполнили:

docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=my_password -p 3306:3306 -d mysql:8.0.43

…Docker создал контейнер без внешнего тома.

Но данные MySQL всё равно где-то сохраняются?

Да, в этом случае Docker автоматически создаёт внутренний анонимный volume, который физически хранится в файловой системе Docker, например:

/var/lib/docker/volumes/<случайное_имя>/_data

Внутри этого _data лежат файлы MySQL (ibdata1ib_logfile0mysql/, и т.д.)


Почему это не лучший вариант

Такой анонимный том:

  • не имеет понятного имени;
  • не виден вам напрямую;
  • удалится, когда вы удалите контейнер (docker rm).

То есть если вы удалите контейнер — все данные MySQL исчезнут. Поэтому обычно делают именованный том — например, mysql_data.

Что делать, если теперь добавить -v

К сожалению, вы не можете изменить параметры томов у уже существующего контейнера. Docker хранит том при создании контейнера, и потом его нельзя «добавить» через start или update. Поэтому нужно сделать следующее 👇


Пересоздание контейнера с новым томом

1. Остановите старый контейнер:

docker stop mysql-server

2. (Необязательно) Сохраните его данные

Если нужно перенести, хотя вряд ли вы успели добавить туда что-то важное, но вдруг. Можно временно скопировать старые данные наружу:

docker cp mysql-server:/var/lib/mysql ./mysql_backup

Теперь у вас на хосте в папке mysql_backup лежит вся база.

3. Удаляем старый контейнер:

docker rm mysql-server

(Данные в старом анонимном томе при этом будут удалены.)

4. Создай новый именованный том:

docker volume create mysql_data

5. Создай новый контейнер, теперь с томом:

docker run --name mysql-server \
  -e MYSQL_ROOT_PASSWORD=my_password \
  -p 3306:3306 \
  -v mysql_data:/var/lib/mysql \
  -d mysql:8.0.43

Теперь:

  • Все данные MySQL будут сохраняться в томе mysql_data
  • Даже если контейнер удалить, данные останутся (docker volume ls покажет их)

Краткое сравнение

ТипКак создаётсяГде хранитсяУдаляется при docker rm
Анонимный томБез -v/var/lib/docker/volumes/<id>/_data✅ Да
Именованный томС -v mysql_data:/var/lib/mysql/var/lib/docker/volumes/mysql_data/_data❌ Нет

(Необязательно) Вернуть старые данные в новый контейнер

Если вы делали резервную копию:

docker cp ./mysql_backup/. mysql_container:/var/lib/mysql

и перезапустите MySQL:

docker restart mysql_container

Подключение к MySQL из DBeaver

Итак, контейнер запущен, данные сохраняются. Попробуем подключиться к нему через DBeaver.

1. Откройте DBeaver.

2. Нажмите Database → New Database Connection.

3. Выберите MySQL.

4. Введите параметры подключения:

ПараметрЗначение
Hostlocalhost
Port3306
Databaseможно оставить пустым
Usernameroot
Passwordmy_password

5. Нажмите Test Connection. Если всё настроено правильно, появится сообщение “Connected successfully”.

6. Сохраните подключение и нажмите Finish.

Теперь можно работать с базой данных через удобный графический интерфейс DBeaver.

Возможная ошибка при подключении к DBeaver

При попытки подключения к DBeaver у вас может возникнуть ошибка Public Key Retrieval is not allowed

Public Key Retrieval is not allowed

Она не связана с Docker, а с настройкой аутентификации MySQL.

MySQL 8 по умолчанию использует новый метод аутентификации — caching_sha2_password, который требует явного разрешения на получение публичного ключа при подключении.

DBeaver (или другой клиент) по соображениям безопасности блокирует такое подключение, если параметр allowPublicKeyRetrieval=true не указан.

✅ Решение 1. Добавить параметр в настройках DBeaver

Самое простое — разрешить получение публичного ключа прямо в DBeaver.

Шаги:

1. Откройте подключение в DBeaver.

2. Нажмите на «Edit Connection» (карандашик рядом с подключением).

3. Перейдите во вкладку Driver properties.

4. В списке найдите (или добавьте вручную) параметр:

PropertyValue
allowPublicKeyRetrievaltrue

5. Также убедитесь, что:

PropertyValue
useSSLfalse (если ты работаете локально)

Нажмите Test Connection — и подключение должно заработать.


✅ Решение 2. Изменить тип аутентификации пользователя в MySQL

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

Войдите в MySQL внутри контейнера:

docker exec -it mysql_container mysql -uroot -p

После входа выполните:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES; 

Это переведёт пользователя root на старую, классическую схему авторизации (mysql_native_password), совместимую со всеми клиентами.

После этого перезапустите контейнер:

docker restart mysql_container

Теперь DBeaver сможет подключаться без ошибок даже без allowPublicKeyRetrieval=true.


💡 Рекомендация

Самый удобный и безопасный способ для разработки — Решение №1 (allowPublicKeyRetrieval=true и useSSL=false в DBeaver). Это не влияет на безопасность, если вы работаете локально (на своём компьютере), а MySQL не доступна извне.

Управление контейнером

Полезные команды:

КомандаОписание
docker psПоказать запущенные контейнеры
docker stop mysql_containerОстановить контейнер
docker start mysql_containerЗапустить контейнер снова
docker logs mysql_containerПосмотреть логи MySQL
docker exec -it mysql_container bashВойти внутрь контейнера (в терминал Linux)

Удаление контейнера и образа

Если хотите полностью удалить MySQL:

docker stop mysql_container
docker rm mysql_container
docker volume rm mysql_data
docker rmi mysql:8.0.43

Дополнительно: использование docker-compose

Для удобства можно создать файл docker-compose.yml:

version: '3.8'

services:
  mysql:
    image: mysql:8.0.43
    container_name: mysql-server
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: my_password
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

Запуск:

docker compose up -d

Остановка:

docker compose down

Это удобно, если вы хотите быстро поднимать и останавливать MySQL одной командой.


Итог

Теперь у вас есть полностью рабочая среда MySQL в Docker:

  • Установка занимает пару минут
  • Данные сохраняются в volume
  • Подключение к DBeaver работает через localhost:3306
  • Всё можно удалить одной командой без следа в системе

Такой подход особенно полезен для обучения, тестов и разработки — вы можете без страха экспериментировать с базой, не рискуя сломать локальную установку.

Хостинг для ваших проектов