Установка и использование 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_schema, mysql, performance_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 (ibdata1, ib_logfile0, mysql/, и т.д.)
Почему это не лучший вариант
Такой анонимный том:
- не имеет понятного имени;
- не виден вам напрямую;
- удалится, когда вы удалите контейнер (
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. Введите параметры подключения:
| Параметр | Значение |
|---|---|
| Host | localhost |
| Port | 3306 |
| Database | можно оставить пустым |
| Username | root |
| Password | my_password |
5. Нажмите Test Connection. Если всё настроено правильно, появится сообщение “Connected successfully”.
6. Сохраните подключение и нажмите Finish.
Теперь можно работать с базой данных через удобный графический интерфейс DBeaver.
Возможная ошибка при подключении к DBeaver
При попытки подключения к DBeaver у вас может возникнуть ошибка 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. В списке найдите (или добавьте вручную) параметр:
| Property | Value |
|---|---|
allowPublicKeyRetrieval | true |
5. Также убедитесь, что:
| Property | Value |
|---|---|
useSSL | false (если ты работаете локально) |
Нажмите 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 - Всё можно удалить одной командой без следа в системе
Такой подход особенно полезен для обучения, тестов и разработки — вы можете без страха экспериментировать с базой, не рискуя сломать локальную установку.
