解決策については下を参照してください
mysqldump
cronジョブを介して呼び出されるphpスクリプトの一部として実行しています。
mysqldumpコマンドから戻ることは可能stderr
ですか、直接読み取ることができる変数に割り当てることはできますか?または、コマンドstderr
のoutput
またはに割り当てることは可能ですか?return_var
exec()
使用されている基本的なコマンド:
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" | gzip -c > dumpfile.sql.gz';
exec( $dump_cmd, $dump_cmd_output, $dump_cmd_return_var );
output
とreturn_var
からexec()
は役に立ちません:
$dump_cmd_output
出力がgzipにパイプされるため、は空です。
$dump_cmd_return_var
gzipからの戻りステータスを示します。
mysqldumpの実行中にエラーが発生したかどうかを確認する他のアプローチを知っています。
gzipで圧縮せずにダンプを実行$dump_cmd_return_var
し、戻りステータスを確認してから、追加コマンドとしてgzipを実行できます。
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" --result-file="dumpfile.sql"';
$zip_cmd = 'gzip dumpfile.sql';
exec( $dump_cmd, $dump_cmd_output, $dump_cmd_return_var );
if($dump_cmd_return_var == 0) {
exec( $zip_cmd, $zip_cmd_output, $zip_cmd_return_var );
}
mysqldumpのオプションをstderr
使用して、mysqldumpからファイルに送信できます。--log-error=dump_errors.txt
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" --log-error=dump_errors.txt | gzip -c > dumpfile.sql.gz';
stderr
または、パイプの前にファイルに送信することによって2> dump_errors.txt
:
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" 2> dump_errors.txt | gzip -c > dumpfile.sql.gz';
または、を使用してみることができますproc_open()
。と同じ問題が発生することを期待していますがexec()
、実行されたコマンド(return_var
)の戻りステータスには、gzipによって返されたステータスが表示されます。
エラーが直接返されるか、スクリプトからアクセス可能な変数に送信されると、よりクリーンになります(複雑さが軽減されます)。したがって、これが可能かどうかを知りたいと思います。
解決:
@user1281385には素晴らしい解決策があります。それをよりよく理解するために、
「bashPIPESTATUS[0]」を検索しました。
1つの結果は、この正確なシナリオを使用しました(mysqldumpはgzipにパイプされています)。詳細情報が必要な場合は、次のリンクを参照して
ください。Bash-パイプコマンドの終了ステータスを確認する方法
これが私がそれをどのように使用しているかです:
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" | gzip -c > dumpfile.sql.gz';
system("bash -c '".$dump_cmd." ; exit \${PIPESTATUS[0]}'", $dump_cmd_return);
if($dump_cmd_return == 0) {
Do some other stuff;
}
基本的に、mysqldumpコマンドは最初に実行されるコマンドであるため、その戻り値はPIPESTATUS配列の最初の値(キー[0])として格納されます。