it-source

도커 MariaDB 컨테이너의 영구 스토리지 컨테이너를 백업할 수 없습니다.

criticalcode 2023. 1. 15. 16:57
반응형

도커 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

반응형