gzip, 서버로 보내기, ungzip

gzip, 서버로 보내기, ungzip

저는 MySQL 테이블 세트를 백업하고 gzip하고, 다른 서버에 scp/ssh로 압축한 다음 압축을 푸는 스크립트를 작성 중입니다. 현재 스크립트는 다음과 같습니다.

#!/bin/bash

DATE=`date +"%d_%b_%Y_%H%M"`
BACKUP_DIR=/mnt/data/backups/saturday/

echo Creating new directory /mnt/data/backups/saturday/fathom_$DATE
sudo mkdir /mnt/data/backups/saturday/fathom_$DATE
sudo chmod 777 /mnt/data/backups/saturday/fathom_$DATE

mysqldump pacific_fathom user_types > /mnt/data/backups/saturday/fathom_$DATE/user_types.sql
echo Dumping users ...
mysqldump pacific_fathom users > /mnt/data/backups/saturday/fathom_$DATE/users.sql
echo Dumping users_roles ...
mysqldump pacific_fathom users_roles > /mnt/data/backups/saturday/fathom_$DATE/users_roles.sql

tar -zvcpf $BACKUP_DIR/PlatformDB-$DATE.tar.gz /mnt/data/backups/saturday/fathom_* | ssh [email protected] 'tar -xzf - -C /mnt/data/backups/saturday'

echo Finished!

백업이 작동하고 파일을 압축하지만 오류가 있다는 메시지가 나타납니다.

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

생성되는 출력 파일은 다음과 같습니다.PlatformDB-22_Jul_2021_1553.tar.gz

ssh 부분으로 절대 이동하지 않습니다(원격 서버에서 마지막으로 확인했는데 거기에 로그인이 없었습니다). 그래서 이 오류가 발생하는 이유가 약간 혼란스럽습니다. 생성된 tar.gz 파일은 tar -xzf - -C /mnt/data/backups/saturday스크립트의 일부를 사용하여 압축을 풀 수 있습니다. 파일 이름으로 바꿔야 합니다 -. 하지만 대본에는 영향을 미치지 않았다고 생각합니다. 그리고 이것은 자동화된 환경에서도 작동하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다!

답변1

이 명령은 tar -zvcpf ...$DATE.tar.gz /mnt/data/backups/saturday/fathom_*gzip으로 압축된 백업을 작성 $DATE.tar.gz하고 백업된 파일 목록을 인쇄합니다.

그런 다음 해당 파일 목록이 .ssh [email protected] 'tar -xzf - ...

해결책: $DATE.tar.gzSSH 명령으로 콘텐츠를 보냅니다. 예를 들어 먼저 로컬 백업 파일을 만든 다음 cat $DATE.tar.gz | ssh ...로컬 백업 파일이 필요하지 않으면 표준 출력에 백업을 만듭니다.

tar -zvcpf - /mnt/data/backups/saturday/fathom_* | ssh ...

또한 이 tee명령을 시도하고 표준 출력 및 로컬 파일에 백업을 쓸 수도 있습니다.

tar -zvcpf - /mnt/data/backups/saturday/fathom_* | tee $DATE.tar.gz | ssh ...

이 질문과 관련이 없는 참고 사항으로, 아카이브가 파일에 기록될 때 tar가 파일 목록을 stdout에 기록하고, 아카이브가 stdout에 기록될 때 tar가 파일 목록을 stderr에 기록한다는 사실을 확인했습니다. 영리한!

관련 정보