Spring ベースの Web アプリケーションから mysqldump を呼び出し、出力をファイルに書き込みたいと考えています。サーバー上に作成されたファイルへのダウンロード リンクをユーザーに提供できるようにしたいと考えています。
以下を実行してみました:
Runtime.getRuntime().exec("/usr/bin/mysqldump -u <username> -p<password> <db_name> >" + fileName);
Runtime.getRuntime().exec("mysqldump -u <username> -p<password> db_name >" + fileName);
次のファイル名の値を試しました。
fileName = "mysql.sql";
fileName = "/tmp/mysql.sql";
fileName = servletContext.getRealPath("") + "/mysql.sql";
しかし、コマンドは成功しません。process.exitValue() は、エラー コード 2 または 6 を返します。
ProcessBuilder pb = new ProcessBuilder("/usr/bin/mysqldump", " -u ", "<username>", " -p<password>", "<db_name>", " > ", fileName);
pb.redirectErrorStream(true); // equivalent of 2>&1
Process p = pb.start();
p.waitFor();
これも役に立ちません。
このようなコマンドを webapp から実行する最善の方法を誰か教えてもらえますか? 出力ファイルはどこに作成する必要がありますか? 上記のコマンドの何が問題になっていますか?
これをさまざまなシステム (Linux、Windows) で実行できるようにする必要があります。webapp はどちらのシステムでも実行されます。必要に応じて、プロパティ ファイルで mysqldump パスを抽象化できます。しかし、どうすればこれを機能させることができますか?