Импорт data.sql MySQL Docker Container
Если у меня есть data.sql, как я могу импортировать базу данных в контейнер mysql docker? Как импортировать данные базы данных. В докционированном мире это добавляет слой сложности. некоторые методы пожалуйста.
Здесь мой 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"
Ответы
Ответ 1
Я не могу заставить это работать с последними mysql или mysql: 5.7. Поэтому я использую mariaDB вместо. Вот мой код docker-compose.yaml
.
version: '3'
services:
mysql:
image: mariadb:10.3
container_name: mariadb
volumes:
- container-volume:/var/lib/mysql
- ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: name_db
ports:
- "3306:3306"
volumes:
container-volume:
Ответ 2
После этого вы можете импортировать базу данных:
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
Ответ 3
Смонтируйте свой sql-dump в /docker-entrypoint-initdb.d/yourdump.sql
используя монтирование тома
mysql:
image: mysql:latest
container_name: mysql-container
ports:
- 3306:3306
volumes:
- ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: name_db
MYSQL_USER: user
MYSQL_PASSWORD: password
Это запустит импорт sql-дампа во время запуска контейнера, см. Https://hub.docker.com/_/mysql/в разделе "Инициализация свежего экземпляра".
Ответ 4
Другой вариант, если вы не хотите монтировать том, но хотите создать дамп файла с вашего локального компьютера, - это cat yourdump.sql
. Вот так:
cat dump.sql | docker exec -i mysql-container mysql -uuser -ppassword db_name
Смотрите: https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb
Ответ 5
Импорт с использованием docker-compose
cat dump.sql | docker-compose exec -T <mysql_container> mysql -u <db-username> -p<db-password> <db-name>
Ответ 6
объединить fooobar.com/questions/13241243/... и ответы на этот вопрос, я думаю, что лучший ответ:
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;"
Также вы можете использовать для ру MONITER прогресса:
cat temp.sql | pv | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;"
И самая важная вещь здесь - это --init-command, которая ускорит процесс импорта в 10 раз быстрее.
Ответ 7
Вы можете запустить контейнер, задав общий каталог (том -v), а затем запустить 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
Внутри контейнера...
mysql -p < /container-dir/file.sql
Пользовательские параметры:
- test-mysql (имя контейнера)
- хост-порт и контейнер-порт
-
my-root-pswd (пароль root для mysql)
- /my-host-dir/shared-dir и /container-dir (каталог хоста, который будет смонтирован в контейнере, и местоположение контейнера общего каталога)
Ответ 8
Вы можете скопировать файл экспорта, например, для dump.sql, используя docker cp, в контейнер, а затем импортировать базу данных. если вам нужны полные инструкции, дайте мне знать, и я предоставлю
Ответ 9
Я могу импортировать с помощью этой команды
docker-compose exec -T mysql mysql -uroot -proot mydatabase < ~/Desktop/mydatabase_2019-10-05.sql