다음 스크립트를 사용하여 데이터베이스 백업을 생성하고 scp를 사용하여 저장 위치로 보내고 있습니다.
내가 알아차린 것은 결과 파일이 겉보기에 올바른 파일을 전달하는 경우가 매우 많다는 것입니다. 대부분의 경우 파일 크기는 약 3GiB 정도이지만 결과 파일은 때로는 900B, 때로는 2.2MiB입니다.
스크립트는 다음과 같습니다
#!/bin/bash
# database credentials
DATABASEHOST=<host>
DATABASEUSER=<user>
DATABASEPASSWORD=<password>
DATABASESCHEMA=<schema>
DATABASEENV=<env>
# Local directory of mysqldump file
LOCALDIR=<localdir>
# Temporary directory for compressed file
TEMPDIR=<tempdir>
# Remote Directory for backups.
REMOTEDIR=<remote-dir>
# USERname to login as
BACKUPUSER=<backupuser>
# Backup host to login to
BACKUPHOST=<backuphost>
# mysqldump file
MYSQLDUMPFILE="$(date +%Y%m%d)"_bkp_"$DATABASESCHEMA".sql
# compressed file
COMPRESSEDFILE="$(date +%Y%m%d)"_"$DATABASEENV"_"$DATABASESCHEMA".tar.gz
#--- end config
echo $(date +%H:%M)
echo "Creating the MySQL dump"
mysqldump --host="$DATABASEHOST" --user="$DATABASEUSER" --password="$DATABASEPASSWORD" --single-transaction "$DATABASESCHEMA" > "$LOCALDIR"/"$MYSQLDUMPFILE"
#echo "Generating md5sum"
md5sum "$LOCALDIR"/* > "$LOCALDIR"/checklist.chk
#echo "Compressing the dump and checklist"
tar -cvzf "$TEMPDIR"/$(date +%Y%m%d)"_"$DATABASEENV"_"$DATABASESCHEMA".tar.gz" "$LOCALDIR"/*
#echo "Sending the compressed file to storage location"
scp "$TEMPDIR"/"$COMPRESSEDFILE" "$BACKUPHOST":"$REMOTEDIR"
echo "Removing generated files"
rm "$LOCALDIR"/checklist.chk > /dev/null 2>&1
rm "$LOCALDIR"/"$MYSQLDUMPFILE" > /dev/null 2>&1
rm "$TEMPDIR"/"$COMPRESSEDFILE" > /dev/null 2>&1
echo $(date +%H:%M)
대부분의 경우 결과 파일은 괜찮으므로 scp 부분에 문제가 있을 수 있다고 생각합니다.
저장 위치 생성 파일이 원본과 동일한지 확인하고, 다른 경우 scp를 다시 시도하려면 어떻게 해야 합니까?
답변1
rsync를 사용해 주세요. Rsync는 파일의 md5 해시를 확인합니다.