2017-07-27 70 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自动安排自己的备份,甚至不需要脚本。