2017-07-27 48 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" 
       ); 

我有在這之後while循環,其保留在循環,如果pr.isAlive()。我認爲這會起作用,但似乎在執行該命令時,該過程立即變得不再活躍。我可以讓線程睡覺,但多久?我怎樣才能做出相同的SQL備份,但檢測mysqldump命令何時完成?

回答

0

該命令立即退出所有權利。這是失敗,因爲重定向不被mysqldump理解。

這不是你如何使用Process。您需要:

  1. 使用ProcessBuilder
  2. 合併輸出流和錯誤流。
  3. 根據需要將sh -ccmd /c添加到命令行的開頭以處理重定向。
  4. 開始這個過程。
  5. 消耗輸出流並記錄它,直到流結束。
  6. 致電Process.waitFor()
  7. 獲取進程的退出代碼並將其記錄下來。

爲什麼你使用Java是一個謎。這只是一個shell腳本。事實上,您可以讓MySQL自動安排自己的備份,甚至不需要腳本。