태그 보관물: docker

data.sql MySQL Docker 컨테이너 가져 오기

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