Если у меня есть data.sql, как я могу импортировать базу данных в мой контейнер докеров mysql? Как я могу импортировать данные из базы данных. В мире dockerized это добавляет уровень сложности. какие методы пожалуйста.
Вот мой docker-compose.yml:
nginx:
build: ./nginx/
container_name: nginx-container
ports:
- 80:80
links:
- php
volumes_from:
- app-data
php:
build: ./php/
container_name: php-container
expose:
- 9000
links:
- mysql
volumes_from:
- app-data
app-data:
image: php:7.0-fpm
container_name: app-data-container
volumes:
- ./www/html/:/var/www/html/
command: "true"
mysql:
image: mysql:latest
container_name: mysql-container
ports:
- 3306:3306
volumes_from:
- mysql-data
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: name_db
MYSQL_USER: user
MYSQL_PASSWORD: password
mysql-data:
image: mysql:latest
container_name: mysql-data-container
volumes:
- /var/lib/mysql
command: "true"
Ответы:
Я не могу заставить эту работу работать с последними версиями mysql или mysql: 5.7. Поэтому вместо этого я использую mariaDB. Вот мой
docker-compose.yaml
код.источник
cd /docker-entrypoint-initdb.d/dump.sql/
& тогда я нахожусь в каталоге? Что может привести к созданию каталога вместо того, чтобы либо вообще не иметь там файла .sql, либо вызвать какую-то ошибку? мой соответствующий docker-compose.yml для контейнера mariadb:mariadb: image: mariadb:latest ... volumes: - app-vhosts:/path/before/sqldump #creates a directory? - ./path/to/sql/dump.sql:/docker-entrypoint-initdb.d/dump.sql
После этого вы можете импортировать базу данных:
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
источник
docker exec -i $(docker-compose ps -q mysql-container) mysql …
. В настоящий момент он не поддерживает чтение со стандартного ввода, как описано здесь .-p
без пароля в целях безопасности.-t
опциюdocker exec
? Джусе используйте,-i
чтобы избежать ошибкиСмонтируйте свой sql-дамп
/docker-entrypoint-initdb.d/yourdump.sql
с помощью монтирования томаЭто вызовет импорт sql-dump во время запуска контейнера, см. Https://hub.docker.com/_/mysql/ в разделе «Инициализация нового экземпляра»
источник
Другой вариант, если вы не хотите монтировать том, но хотите выгрузить файл с локального компьютера, - это конвейерная передача
cat yourdump.sql
. Вот так:См. Https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb
источник
dump.sql
содержитsource
файлыИмпорт с помощью docker-compose
источник
объедините https://stackoverflow.com/a/51837876/1078784 и ответы на этот вопрос, я думаю, что лучший ответ:
cat {SQL FILE NAME} | docker exec -i {MYSQL CONTAINER NAME} {MYSQL PATH IN CONTAINER} --init-command="SET autocommit=0;"
например, в моей системе эта команда должна выглядеть так:
cat temp.sql | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
также вы можете использовать pv для отслеживания прогресса:
cat temp.sql | pv | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
И самое главное здесь - "--init-command", которая ускорит процесс импорта в 10 раз быстрее.
источник
Я могу импортировать с помощью этой команды
источник
docker-compose exec -T [host] mysql -u [mysql user] -p[password] [database] < localfile.sql
. Кроме того, я думаю, что в вашем заявлении есть ошибка. Между-u
и самим именем пользователя должен быть пробел .вы можете выполнить следующие простые шаги:
ПЕРВЫЙ ПУТЬ:
сначала скопируйте файл дампа SQL из локального каталога в контейнер mysql. используйте команду docker cp
а затем выполните mysql-контейнер, используя (ПРИМЕЧАНИЕ: если вы используете версию alpine, вам необходимо заменить bash на sh в приведенной ниже команде.)
а затем вы можете просто импортировать этот файл дампа SQL.
ВТОРОЙ ПУТЬ: ПРОСТОЙ
Как упоминалось на официальной странице mysql Docker Hub.
Каждый раз, когда контейнер запускается в первый раз, создается новая база данных с указанным именем в переменной MYSQL_DATABASE, которую вы можете передать, настроив переменную среды, см. Здесь, как установить переменные среды
По умолчанию контейнер будет выполнять файлы с расширениями .sh, .sql и .sql.gz, которые находятся в папке /docker-entrypoint-initdb.d. Файлы будут выполняться в алфавитном порядке. таким образом ваши файлы SQL будут импортированы по умолчанию в базу данных, указанную переменной MYSQL_DATABASE.
для более подробной информации вы всегда можете посетить официальную страницу
источник
Вы можете запустить контейнер, установив общий каталог (-v volume), а затем запустить bash в этом контейнере. После этого вы можете интерактивно использовать mysql-client для выполнения файла .sql изнутри контейнера. obs: / my-host-dir / shared-dir - это расположение .sql в хост-системе.
docker run --detach --name=test-mysql -p host-port:container-port --env="MYSQL_ROOT_PASSWORD=my-root-pswd" -v /my-host-dir/shared-dir:/container-dir mysql:latest docker exec -it test-mysql bash
Внутри контейнера ...
Специальные параметры:
источник
Эта работа для меня
$ docker exec -i NAME_CONTAINER_MYSQL mysql -u DB_USER -pPASSWORD DATABASE < /path/to/your/file.sql
Во-первых, если вы хотите узнать, что такое NAME_CONTAINER_MYSQL, вы должны использовать следующую команду:
$ docker ps
В выходном столбце NAME вы увидите NAME_CONTAINER_MYSQL, который вам нужно заменить в приведенной выше команде.
источник
Попытка получить
"docker exec ... < data.sql"
ответы Windows PowerShell с помощью:Но можно завершить это,
cmd /c
чтобы устранить проблему:источник
вы можете скопировать файл экспорта, например, dump.sql, используя docker cp, в контейнер, а затем импортировать db. если вам нужны подробные инструкции, дайте мне знать, и я предоставлю
источник