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

関連情報