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"
답변
최신 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:
답변
나중에 데이터베이스를 가져올 수 있습니다.
docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
답변
/docker-entrypoint-initdb.d/yourdump.sql
볼륨 마운트를 사용 하여 sql-dump를 마운트하십시오.
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-dump 가져 오기가 트리거 됩니다. “새 인스턴스 초기화”아래의 https://hub.docker.com/_/mysql/ 을 참조
하십시오.
답변
볼륨을 마운트하고 싶지는 않지만 로컬 머신에서 파일을 덤프하려는 경우 또 다른 옵션은 파이프를 사용하는 것 cat yourdump.sql
입니다. 이렇게 :
cat dump.sql | docker exec -i mysql-container mysql -uuser -ppassword db_name
참조 :
https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb
답변
docker-compose를 사용하여 가져 오기
cat dump.sql | docker-compose exec -T <mysql_container> mysql -u <db-username> -p<db-password> <db-name>
답변
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 mysql mysql -uroot -proot mydatabase < ~/Desktop/mydatabase_2019-10-05.sql