Как мне получить доступ к моим базам данных?

Я создал контейнер в Docker с помощью команды: 

```bash
docker run --name igormysql -e MYSQL_ROOT_PASSWORD=gghhhh -p 3309:3306 -d mysql/mysql-server:latest
```
После этого я вошел в контейнер с помощью команды:

```bash
docker exec -it igormysql mysql -U root -p gghhhh
```

Затем, при использовании команды:

```bash
mysql -h localhost -u root -p
```

я смог зайти в базы данных, но терминал показывает только следующие базы:

- information_schema
- mysql
- performance_schema
- sys

Таким образом, похоже, что я подключился к новому серверу. У меня на компьютере уже установлен MySQL с множеством моих баз данных. Как мне подключиться к ним через Docker?
  • 28 сентября 2024 г. 14:53
Ответы на вопрос 3
Для того чтобы подключиться к вашим существующим базам данных в MySQL, вам нужно сделать следующее:

1. **Импортировать существующие базы данных**: В вашем случае при запуске контейнера вы создали новую инстанцию MySQL, которая имеет свои собственные базы данных (в данном случае только системные базы). Если вы хотите использовать ваши существующие базы данных, вам нужно будет перенести их в новый контейнер MySQL.

2. **Экспортировать базы данных из старого MySQL**: Для начала вам нужно экспортировать ваши текущие базы данных с помощью `mysqldump`. Вы можете сделать это из терминала вашего компьютера, выполнив команду:
   ```bash
   mysqldump -u ваш_пользователь -p --all-databases > all_databases.sql
   ```
   или для конкретной базы данных:
   ```bash
   mysqldump -u ваш_пользователь -p имя_базы_данных > имя_базы_данных.sql
   ```

3. **Скопировать экспортированный файл в контейнер**: После того как вы получили файл с вашим дампом баз данных, вам нужно скопировать его внутрь контейнера. Это можно сделать с помощью команды `docker cp`:
   ```bash
   docker cp all_databases.sql igormysql:/all_databases.sql
   ```

4. **Импортировать базы данных в контейнер**: Войдите в контейнер и импортируйте вашу базу данных:
   ```bash
   docker exec -it igormysql bash
   mysql -u root -p gghhhh < /all_databases.sql
   ```

5. **Проверьте базы данных**: После импорта, вы можете войти в MySQL в контейнере снова и выполнить команду:
   ```sql
   SHOW DATABASES;
   ```
   Здесь вы должны увидеть ваши базы данных.

Если вы хотите сохранить ваши базы данных в контейнере даже после его остановки или удаления, вам следует использовать Docker Volume, чтобы сохранить данные. Например, вы можете создать volume следующим образом:

```bash
docker run --name igormysql -e MYSQL_ROOT_PASSWORD=gghhhh -p 3309:3306 -v мици_папка_на_вашем_компьютере:/var/lib/mysql -d mysql/mysql-server:latest
```

Где `мици_папка_на_вашем_компьютере` - это путь на вашем компьютере, который будет использоваться для хранения данных в контейнере.
сделать дамп БД дома, и сделать рестор БД на сервере...
Игорь, все парни выше в комментах абсолютны правы, что нужно изучить и понять контейнеризацию, а далее разделять окружения - либо внутри контейнера либо на хосте (в данном случае - на вашем компе). 

Но при такой постановке вопроса и условии, что проект учебный, всё же есть вариант попробовать получить пятерку. :)

Итак, если у тебя есть комп с mysql сервером и уже готовым набором баз данных, но при этом со всем этим делом нужно работать именно изнутри докер контейнера, то вот как можно поступить:

1. Находим точную (!) версию mysql сервера на компе
2. Находим точный путь к директории, где mysql сервер на компе хранит данные всех баз
3. Создаем докер-контейнер с точно такой же версией mysql, как на компе (мы нашли ее в п.1.)
4. Находим точный путь к директории, где mysql сервер в контейнере хранит данные всех баз (т.к. ОС хоста и контейнера могут различаться, то пути вероятно тоже)
5. Создаем volume для докер-контейнера, где путь на хосте (т.е. на твоем компе) будет соответствовать пути, который мы нашли в п.2., а путь в контейнере будет соответствовать пути, который мы нашли в п.4.

Что получим: файлы всех баз будут общие у хоста и контейнера.
Узкие места: возможно mysql умнее, и добавляет разные блокировки на файлы с базами, и тогда будут коллизии или просто ошибки доступа. Тут не знаю заранее, надо пробовать.

PS этот способ - чисто помочь запустить проект. Но лучше, конечно, научиться дампить / ресторить БД через entrypoints и другие методы.
Похожие вопросы