호스트에서 도커 컨테이너로 MySQL 덤프를 복원하는 방법
이 주제가 중복된 것은 확실하지만, 도저히 끝낼 수가 없습니다.docker-compose.yml 파일을 수정하지 않고 데이터베이스 덤프를 런타임에 MySQL 컨테이너에 복원하는 것을 좋아합니다.
도커파일
FROM php:5.4.45-apache
RUN apt-get update
RUN docker-php-ext-install mysql mysqli
도커-디젤.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 호스트에서 도커 도구 상자 시작
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을 설치하여 덤프를 사용해 보았는데 복원이 가능합니다.
아래 명령어를 사용해도 저는 괜찮습니다.
도커 호스트 시스템에서 실행합니다.
지원하다
docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql
복원
cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE
혹시라도 문제가 생기면 저에게 알려주시기 바랍니다.
dockerhub의 문서는 저에게 효과가 있었습니다: https://hub.docker.com/_/mysql
지원하다
docker exec some-mysql sh -c 'exec mysqldump --all-databases -u<user> -p<password> <database>' > /some/path/on/your/host/all-databases.sql
복원
docker exec -i some-mysql sh -c 'exec mysql -u<user> -p<password> <database>' < /some/path/on/your/host/all-databases.sql
볼륨을 사용하는 경우 덤프를 복원한 후에도 데이터가 유지됩니다.
포트 3306에서도 데이터베이스를 노출하고 있으므로 클라이언트를 통해 데이터베이스에 연결하는 것이 해결책이 될 수 있습니다.MySql Workbench와 같은 그래픽 클라이언트로 mysql에 연결하여 데이터베이스를 복원할 수 있습니다.
또는 명령줄에 mysql을 설치한 경우
$ mysql --host=127.0.0.1 --port=3306 -u test -p testdb < dump_on_host.sql
https://hub.docker.com/_/mysql 의 최신 지침에 따라 다음을 수행할 수 있습니다.
docker-compose exec -T mysql_service sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" testdb' < dump_on_host.sql
이를 통해 암호를 명령 기록에 입력하지 않는 장점이 있습니다.
하나의 도커 DB에서 다른 도커 DB로
지원하다
docker exec containerid mysqldump -u root --password=root portal-db > lower-portal-db.sql
복원
cat lower-portal-db.sql | docker exec -i containerid mysql -u root --password=root portal-db
다음 명령을 시도합니다.
sudo docker exec -i CONTAINER_ID sh -c 'exec mysql -u root -p[YourPassword] database_name' < /your/database/directory/database_name.sql;
언급URL : https://stackoverflow.com/questions/46579381/how-to-restore-mysql-dump-from-host-to-docker-container
'programing' 카테고리의 다른 글
Get-child 항목을 사용하여 지난 3일 동안 수정된 파일 목록 가져오기 (0) | 2023.09.06 |
---|---|
SQL 서버 랜덤 정렬 (0) | 2023.09.06 |
Twitter 부트스트랩 드롭다운을 숨기는 방법 (0) | 2023.09.06 |
.xls 파일에서 "워크북의 절대 경로" 가져오기 (0) | 2023.08.17 |
스프링레스트 컨트롤러에서 일반 json 본체에 액세스하는 방법은 무엇입니까? (0) | 2023.08.17 |