mysqldumpでエラーが発生しない場合にのみ、SQLダンプを圧縮したいと思います。間違ったパスワードを入力しようとしましたが、それでもgzipが実行されます。
mysqldump -u username -ppassword dbname |& if [ $? == 0 ]; then gzip > test.gz; else echo "error"; fi
私のコマンドの何が問題になっていますか、それとももっと良い解決策がありますか?
承認された回答:
|&
を削除できると思います (理由は、stdoutまたはstderrを次の条件にパイプする必要がないためです。コマンドセパレータとして「;」を使用できます)。このようなものはおそらく機能するはずです:
#!/bin/bash
mysqldump -u myuser -p mypasswd > mydb.dump
if [[ $? -eq 0 ]]; then
gzip mydb.dump
else
echo >&2 "DB backup failed"
exit 1
fi
編集:gzipの成功を確認するには、次のようにします:
mysqldump -u myuser -p mypasswd | gzip > mydb.dump.gz && echo "success" || echo "failure"
ただし、これはmysqldump
であっても成功を報告します 失敗しました。つまり、gzipがディスクをいっぱいにする以外のほとんどの理由でバックアップが失敗した場合。