저는 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.gz
SSH 명령으로 콘텐츠를 보냅니다. 예를 들어 먼저 로컬 백업 파일을 만든 다음 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에 기록한다는 사실을 확인했습니다. 영리한!