繁体   English   中英

使用Java命令在mysql中还原数据库

[英]Restoring database in mysql using java command

它是我使用Java命令恢复mysql数据库的代码。

当我调试代码时,它卡在runtimeProcess.waitFor();

谁能提供解决这个问题的方法?

public static boolean restoreDB(String dbUserName, String dbPassword,String dbName, String path) {

    String command ="mysql -u"+dbUserName+" -p"+dbPassword+" "+dbName+" < \""+path+"\"";

    Process runtimeProcess;
    try {

        runtimeProcess = Runtime.getRuntime().exec(command);
        int processComplete = runtimeProcess.waitFor();

        if (processComplete == 0) {
            System.out.println("Backup restored successfully");
            return true;
        } else {
            System.out.println("Could not restore the backup");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return false;
}

该进程可能阻塞了等待输入的状态,或者写入了太多的输出,以至于它已经填满了进程的输出缓冲区,并在等待您读取输出。 如果您确保打印出该过程的stdout和stderr,则可以通过两种方式获得更多信息:

private static class StreamReader implements Runnable {

    private InputStream stream;
    private volatile boolean finished = false;

    public StreamReader(InputStream stream) {
        this.stream = stream;
    }

    public void run() {
        Scanner scanner = new Scanner(stream);

        while(!finished) {
            System.out.println(scanner.nextLine());          
        }

    }

}

//...
runtimeProcess = Runtime.getRuntime().exec(command);
StreamReader stdoutReader = new StreamReader(runtimeProcess.getInputStream());
StreamReader stderrReader = new StreamReader(runtimeProcess.getErrorStream());
new Thread(stdoutReader).start();
new Thread(stderrReader).start();
int processComplete = -1;
try {
    processComplete = runtimeProcess.waitFor();
} finally {
    stdoutReader.finished = true;
    stderrReader.finished = true;
}

终于我找到了答案..谢谢你们的支持,我看到他们中的许多人有同样的问题,所以这是我为您提供的解决方案

我们无法使用Runtime.getRuntime()。exec()函数执行mysql restore命令。

所以我创建了一个批处理文件并在其中添加此mysql restore命令并执行了它。 :)

public static void restoreDB(String dbUserName, String dbPassword,String dbName, String path) {
    try{
        //for linux .bat must replaced with .sh
        String destpath = "D:\\backup\\db.bat";

    //creating batch file 
    PrintWriter writer = new PrintWriter(destpath);
    String command = "mysql -u"+dbUserName+" -p"+dbPassword+" "+dbName+" < \""+path+"\"";
    writer.println(command);
    writer.close();

    //executing batch file
    Process run = Runtime.getRuntime().exec(destpath);
    System.out.println("file created");
    int processComplete = run.waitFor();

        if (processComplete == 0) {
            System.out.println("Backup created successfully");
            //return true;
        } else {
            System.out.println("Could not create the backup");
        }
    }catch(Exception ex)
    {
        ex.printStackTrace();
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM