Docker-compose / mysql: как правильно указать том для использования существующей базы данных

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

Эта команда запуска докера работает нормально, т.е. база данных доступна, а данные сохраняются.

docker run -v ./mydata:/var/lib/mysql mysql:5.7

Однако я не могу заставить его работать с docker-compose.

Я получаю следующие ошибки

[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 
...
Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

Мой файл docker-compose выглядит так:

version: "3.7"
  services:
  database  :
    restart: always
    image: mysql:5.7
    command: --port=4406
    volumes:
      - ./mydata:/var/lib/mysql

Что не так с моим композитным файлом?

ОБНОВИТЬ: Содержание mydata

  • auto.cnf
  • ib_buffer
  • бассейн
  • ib_logfile0
  • ib_logfile1
  • ibdata1
  • mysql

Еще пробовал ./mydata/mysql:/var/lib/mysql для томов. Это позволяет мне подключиться к базе данных (например, через рабочую среду mysql), но я получаю другую ошибку (DESCRIBE mysql.db File not found), когда пытаюсь увидеть пользователей.

Как выглядит содержимое /mydata? Можно сделать ls?

Evert 06.09.2018 15:50

Спасибо @Evert, да, содержимое mydata - auto.cnf ib_buffer_pool ib_logfile0 ib_logfile1 ibdata1 mysql

Zuabi 06.09.2018 16:08

Может ли пользователь, под которым работает mysql, получить доступ к /var/lib/mysql/mysql/user.*?

Evert 06.09.2018 16:17

Вы имеете в виду файлы в расположении по умолчанию каталога данных сервера mysql? Да, они доступны. Они также существуют в каталоге mydata (который является копией исходного каталога данных) и внутри контейнера.

Zuabi 06.09.2018 16:25

возможно проблема с разрешением. кому принадлежат файлы / каталог на вашем хосте?

edk750 28.10.2018 14:51

Вы нашли свою проблему? Я сталкиваюсь с таким же здесь.

Kev 17.06.2020 16:10

@kev, это было давно и уже точно не помню. Одно из возможных решений заключалось в использовании абсолютных путей для указания пути к папке с моими данными. Другим решением было удаление моей антивирусной программы.

Zuabi 18.06.2020 21:01

@Zuabi: спасибо за ответ. Я использую абсолютный путь. Сегодня вы все еще используете Docker с сервером mysql? Я разместил здесь: stackoverflow.com/questions/62429086/…

Kev 18.06.2020 21:17

@kev, нет. Я больше не работаю над этим проектом

Zuabi 18.06.2020 22:08
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
9
1 951
0

Другие вопросы по теме