私は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に書き込むことを確認しました。賢い!