使用java代码在window环境下实现定时执行Mysql备份与还原
//备份 public void doBackup() { Date currentTime = new Date(); System.out.println("当前时间是:" + new Date()); Runtime runtime = Runtime.getRuntime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); String sdfDate = sdf.format(currentTime); //备份到的目标文件 String filePath = "E:\\temporary\\time_" + sdfDate + ".sql"; //要执行的命令(%dwz%是环境变量值) String cmdStr = "%dwz%mysqldump --defaults-extra-file=%dwz%..\\my.ini charm_village > " + filePath; try { String[] cmd = {"CMD", "/C", cmdStr}; String[] path = {"dwz=E:\\dwz-software\\mysql-5.7.27-winx64\\bin\\"}; //执行外部程序 Process process = runtime.exec(cmd, path); InputStream errorStream = process.getErrorStream(); //获取命令执行时的错误信息 System.err.println(IOUtils.toString(errorStream, "UTF-8")); //阻塞当前线程,并等待外部程序中止后获取结果码 int exitVal = process.waitFor(); if(exitVal == 0) { System.out.println("数据库备份成功!"); } } catch (Exception e) { e.printStackTrace(); } }
关于返回结果类型:Process,它有几个方法:
1.destroy():杀掉子进程
2.exitValue():返回子进程的出口值,值 0 表示正常终止
3.getErrorStream():获取子进程的错误流
4.getInputStream():获取子进程的输入流
5.getOutputStream():获取子进程的输出流
6.waitFor():导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。假设已终止该子进程。此方法马上返回。假设没有终止该子进程,调用的线程将被堵塞。直到退出子进程,依据惯例,0 表示正常终止
参考文章: