次のスクリプトを使用してデータベースのバックアップを作成し、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 ハッシュをチェックします。