2017-07-27 18 views
0

私はMysqlDumpを使ってjava内からMySQLデータベースを自動的にバックアップするプログラムを作っています。私はファイルを作成し、それを圧縮したい。しかし、MySQLDumpに問題があります。Java経由でMySQLをバックアップ

私は、mysqldumpをを作成するには、次を使用しています:

Process pr = Runtime.getRuntime().exec(
       "mysqldump -u "+user+" --password='"+password+"' "+database+" > /root/moltres/backups/sql/"+database+".sql" 
       ); 

私はpr.isAlive()場合はループに残り、この後のwhileループを持っています。私はこれがうまくいくと思いましたが、コマンドが実行されると、プロセスは即座に生き残ることができなくなりました。私はスレッドをスリープ状態にすることができましたが、どれくらいの期間ですか?どのように私は同じSQLバックアップを行うことができますが、mysqldumpコマンドが完了したら検出しますか?

答えて

0

コマンドはすぐに終了します。リダイレクトがmysqldumpによって理解されていないため、に失敗しています。

Processの使用方法ではありません。

  1. ProcessBuilderを使用する必要があります。
  2. 出力ストリームとエラーストリームをマージします。
  3. sh -cまたはcmd /cを、リダイレクトを処理するコマンドラインの先頭に適切に追加します。
  4. プロセスを開始します。
  5. 出力ストリームを消費して記録し、ストリームの終わりまで読み取ります。
  6. Process.waitFor()を呼び出します。
  7. プロセスの終了コードを取得してログに記録します。

なぜこれをJavaで使用しているのかは、謎です。それは単なるシェルスクリプトです。実際には、スクリプトを必要とせずにMySQLに自動的に独自のバックアップをスケジュールすることができます。

関連する問題