2017-10-05 3 views
0

중복 된 주제이지만 실행을 완료하지 못했습니다. 수정자를 수정하지 않고 런타임에 데이터베이스 컨테이너를 MySQL 컨테이너로 복원하고 싶습니다. -compose.yml 파일호스트에서 Docker 컨테이너로 MySQL 덤프를 복원하는 방법

Dockerfile

FROM php:5.4.45-apache 
RUN apt-get update 
RUN docker-php-ext-install mysql mysqli 

고정 표시기 - compose.yml

version: '2' 
services: 
    php_service: 
    container_name: my_php 
    # Use Dockerfile in this dir to build the image 
    build: . 
    # Stop containers always after exiting. 
    restart: always 
    ports: 
     # 'localhost' does not works from the host, but the IP of docker itself 
     # (192.168.99.100 for example - shown on the top of the console) 
     - "80:80" 
     - "443:443" 
    environment: 
     # Pass variables 
     - API_TOKEN=xxxx 
    volumes: 
     # The current directory will be mounted to '/var/www/html' 
     # WORKS ONLY IN USER'S DIR ON WINDOWS (~/Downloads for example) 
     - .:/var/www/html 
    # See https://hub.docker.com/_/mysql/ for additional information. 
    # To open up console, run `docker exec -it my_mysql bash`. 
    # To restore a dump `docker exec -i my_mysql /usr/bin/mysql -u root 
    # --password=test_pass DATABASE < DUMP.sql` should work, but it never did. 
    mysql_service: 
    container_name: my_mysql 
    # Use an existing image 
    image: mysql:5.6 
    restart: always 
    ports: 
     # Let it accessible for other apps (mysql on host, IDE, etc.) 
     - "3306:3306" 
    environment: 
     MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this 
     MYSQL_USER: 'test' 
     MYSQL_PASS: 'pass' 
    volumes: 
     # Named volumes (my-datavolume) has to be listed in the "volumes" 
     # section - I don't know how it works or what is it doing at all... 
     # (-_-') 
     - my-datavolume:/var/lib/mysql 
volumes: 
    my-datavolume: 

단계 재현 :

  • 시작 도커 도구 상자를 Windows 7에서 호스트
  • ,536,913,632 10
  • docker-compose up
  • 를 열고 새 부두 노동자 도구 상자 터미널은
  • docker exec my_msql /usr/bin/mysql -u root --password=test_pass -e 'CREATE DATABASE testdb;'
  • docker exec -i my_mysql /usr/bin/mysql -u root --password=test_pass testdb < dump_on_host.sql
  • docker exec -it my_mysql /usr/bin/mysql -u root --password=test_pass testdb
  • mysql> SHOW TABLES;

데이터베이스가 비어 있습니다. 터미널이 너무 빨리 응답하기 때문에 아무것도하지 않는 것 같습니다. 내 호스트에 MySQL을 설치하여 덤프를 시도했지만 복원 할 수 있습니다.

+0

당신은'고정 표시기 간부 -i my_mysql 화장실 Thilo

+0

제안에 감사드립니다 - 그것은 입력이 비어 있다고 ('0 0 0') 말합니다. – bimlas

+0

파일이 실제로 있다고 가정하면 파이프가 작동하지 않았을 수 있습니까? 'cat dump_on_host.sql | 시도해보십시오. 도커 간부 ...' – Thilo

답변

1

다음 명령을 사용해보십시오.

도커 호스트 시스템에서 실행하십시오.

백업

고정 표시기 간부 컨테이너는/usr/빈/mysqldump를 -u 루트 --password = 루트 DATABASE> backup.sql


고양이 backup.sql 복원 | 고정 표시기 간부 -i 컨테이너는/usr/빈/mysql을 -u 루트 --password = 루트 DATABASE는

날 경우 어떤 문제를 알려 주시기 바랍니다.

+0

여는 메시지에 대한 설명을보십시오. – bimlas

0

볼륨을 사용 중이므로 덤프를 복원 한 후에도 데이터가 유지됩니다.

또한 데이터베이스를 포트 3306에 노출하므로 클라이언트를 통해 데이터베이스에 연결할 수 있습니다. MySql Workbench과 같은 그래픽 클라이언트를 사용하여 mysql에 연결하고 거기에서 데이터베이스를 복원 할 수있다.

또는 당신이 당신의 명령 줄에서 MySQL을 설치 한 경우

$ mysql --host=127.0.0.1 --port=3306 -u test -p testdb < dump_on_host.sql 
관련 문제