mysqldump
コマンドが成功したかどうかをテストする bash 関数を作成したいと考えています。これまでに試したことは、次のように、ダンプ ファイルのサイズがゼロかどうかをテストすることです。
l_mysqldump= # set your custom mysqldump path here, like /Applications/MAMP/Library/bin/mysqldump
${l_mysqldump:-mysqldump} -u$l_db_user -p$l_db_pass -h $l_db_host $l_db_name > latest-dump.mssql
if [[ -s latest-dump.mssql ]]
then
echo "Success: not zero size."
else
echo "Error: zero size."
exit 1
fi
mysqldump
デフォルトのmysqlサーバーがダウンしているときにmysqldump
コマンドを実行すると次のエラーが発生するため、コマンドの終了ステータスをテストするのではなく、この方法でテストすることにしました。
mysqldump: エラーが発生しました: 2002: 接続しようとすると、ソケット '/tmp/mysql.sock' (2) を介してローカル MySQL サーバーに接続できません
このエラーが発生しても、0 バイトの .mssql ファイルが生成されます。また、終了ステータスは何があっても0です。mysqldump
ダンプが失敗した場合、スクリプトは終了する必要があり、別のバイナリを指定するか、サーバーをアクティブにする必要があることをユーザーに伝える必要があります。
上記のコードは正常に動作します。mysqldump
ただし、圧縮されていないダンプ ファイルを生成したくありません。次のように、bzipしたい:
${l_mysqldump:-mysqldump} -u$l_db_user -p$l_db_pass -h $l_db_host $l_db_name | bzip2 -c > latest-dump.mssql.bz2
問題は、[-s]
生成される .bz2 ファイルが 14 バイトであるため、これが私の bash テストを中断することです。したがって、圧縮されていない .mssql ファイルのサイズがゼロであっても、同等のアーカイブのサイズはゼロではありません。
それで、これを解決する最善の方法は何ですか?圧縮されていないダンプ ファイルを生成し、テストしてから bzip するだけで済みます。ただし、これを行うにはもっとスマートな方法があると思います。