Восстановите дамп sql в запущенный контейнер Docker mysql / mariadb - PullRequest
0 голосов
/ 29 октября 2019

Работает док-контейнер mariadb / mysql. Я хочу восстановить дамп sql с хоста.

docker exec -i container_name \
  /bin/sh -c 'exec mysql -uroot -psecret' \
  < gunzip -c backup.sql.gz

Файл резервной копии существует. Но я получаю эту ошибку:

-bash: gunzip: Нет такого файла или каталога

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Ваша локальная оболочка получает первый проход при чтении этой команды. Он видит перенаправление < gunzip и пытается открыть локальный файл с именем gunzip в текущем каталоге и использовать его в качестве стандартного ввода команды docker exec. Когда этот файл не существует, вы получаете сообщение об ошибке.

Вы ищете оболочку конвейер , а не перенаправление

gunzip -c backup.sql.gz \
  | mysql -h127.0.0.1 -uroot -psecret

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

Если вы действительно хотите сделать это через docker exec,применяется тот же базовый макет

gunzip -c backup.sql.gz \
  | sudo docker exec container_name \
    mysql -uroot -psecret
1 голос
/ 29 октября 2019

Я не буду рекомендовать восстановление с помощью команды docker exec, лучший способ поместить файл дампа в docker-образ, если он маленький, или смонтировать файл дампа в /docker-entrypoint-initdb.d.

Так что добавьте это вваш Dockerfile, и вам нужно будет выполнить эти команды после запуска контейнера,

FROM mariadb
COPY backup.sql.gz /docker-entrypoint-initdb.d

Поэтому, когда вы запустите контейнер, он автоматически заполнится.

Во-вторых, вы также можете использовать хосттом связывания.

docker run -v $PWD/backup.sql.gz:/docker-entrypoint-initdb.d/ -it mariadb

Инициализация свежего экземпляра

Когда контейнер запускается впервые, новая база данных с указанным именем будетсоздан и инициализирован с помощью предоставленных переменных конфигурации. Кроме того, он будет выполнять файлы с расширениями .sh, .sql and .sql.gz, которые находятся в /docker-entrypoint-initdb.d. Файлы будут выполнены в алфавитном порядке. Вы можете легко заполнить свои службы mariadb, смонтировав дамп SQL в этот каталог и предоставив пользовательские образы с предоставленными данными. Файлы SQL будут импортированы по умолчанию в базу данных, указанную в переменной MYSQL_DATABASE.

mariadb-dockerhub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...