도커 MariaDB 컨테이너의 영구 스토리지 컨테이너를 백업할 수 없습니다.
이 질문에 대한 답변은 다음과 같습니다.도커에 있는 영속적인 스토리지(데이터베이스 등)를 처리하는 방법.특히 백업/복원 절차에 문제가 있습니다.여기 이야기가 있습니다...
컨테이너로 사용할 수 있는 심플한 이미지를 만들었습니다.도커파일은 다음과 같습니다.
FROM busybox
VOLUME /var/lib/mysql
CMD /bin/sh
다음 명령을 사용하여 이 이미지에서 컨테이너를 만들었습니다.
docker build -t myimages/datastore .
docker run --name mysql_data myimages/datastore true
그런 다음 tutum/mariadb 이미지를 만들고 컨테이너를 만들었습니다.
docker run -d -p 3306:3306 --volumes-from mysql_data tutum/mariadb
모든 것이 잘 작동한다.를 사용하여 데이터베이스에 접속할 수 있습니다.mysql
클라이언트 및 데이터베이스 작업을 수행합니다.구체적으로는 이렇게 했습니다.create database testdb;
그리고.create table testtbl select 1 as 'id', 'hello' as 'word';
.
다음으로, 나는 내 컨테이너를 백업하려고 시도했다.위의 질문에 대한 답변(몇 가지 수정사항 포함)에 따라 다음을 수행했습니다.
docker run --rm --volumes-from mysql_data -v $(pwd):/backup busybox \
tar cvf /backup/backup.tar /var/lib/mysql
그리고 부아!저는 한 잔 했다.backup.tar
파일을 호스트의 백업 폴더에 저장합니다.
마지막 단계로 다음 일련의 명령을 사용하여 백업을 복원하려고 했습니다.
docker run --name mysql_data2 myimages/datastore true
docker run --rm --volumes-from mysql_data2 -v $(pwd):/backup busybox \
tar xvf /backup/backup.tar -C /var/lib/mysql/
그리고 새 데이터 컨테이너에서 볼륨을 가져오는 새 MariaDB 컨테이너를 만들었습니다.
docker run -d -p 3308:3306 --volumes-from mysql_data2 tutum/mariadb
새 데이터베이스 컨테이너는 정상적으로 시작되었고, 이 컨테이너에 연결했습니다.mysql
데이터베이스를 확인했습니다.여기서 문제가 발생하였습니다.이것보다testdb
데이터베이스(위에서 작성한 바와 같이)는var
데이터 베이스가 아닌testtbl
테이블이 없습니다.
내가 뭘 잘못하고 있는지 아는 사람 있어?감사합니다!
MySQL이 데이터를 저장하는 방식 때문에 (컨테이너에서 데이터베이스 파일을 복사하는 방식으로) 이 작업을 진행하면 효과가 없을 것으로 보입니다.특히 InnoDB 파일은 복사만 할 수 없습니다.이 문서에는 다음과 같은 내용이 기재되어 있습니다.
InnoDB가 반드시 테이블 내용을 데이터베이스 디렉토리에 저장하지는 않기 때문에 데이터베이스에 InnoDB 테이블이 포함된 경우 테이블 파일 복사 방법이 작동하지 않습니다.또한 서버가 데이터를 적극적으로 업데이트하지 않더라도 InnoDB는 메모리에 캐시된 데이터를 수정하고 디스크에 플러시하지 않을 수 있습니다.
그래서 이 질문에 대한 짧은 대답은 "이렇게는 할 수 없다"입니다.긴 대답은 다음과 같습니다.mysqldump
또는 이와 유사한 도구를 사용합니다.
언급URL : https://stackoverflow.com/questions/24870992/unable-to-back-up-persistent-storage-container-for-docker-mariadb-container
'it-source' 카테고리의 다른 글
MySQL - 하나의 INSERT 문에 몇 개의 행을 삽입할 수 있습니까? (0) | 2023.01.15 |
---|---|
명령줄에서 PHP 코드 문자열 실행 (0) | 2023.01.15 |
Larabel 마이그레이션에서 열을 null로 만들 수 없습니다. (0) | 2023.01.15 |
문자열을 이중으로 변환합니다. 이것이 가능한가요? (0) | 2023.01.15 |
GROUP_CONCAT 쉼표 구분자 - MySQL (0) | 2023.01.15 |