如何使用java备份和恢复mysql数据库

如何使用java备份和恢复mysql数据库,java,mysqldump,Java,Mysqldump,我有一个小应用程序,我将用它来备份和恢复一个mysql数据库,备份的编码如下,它工作正常 .... String command = "mysqldump --host=" + dataBase.getHost() + " --user=" + dataBase.getUserName() + " --password=" + dataBase.getPassword() + " " + dataBase.getDatabaseName() + " -r " +

我有一个小应用程序,我将用它来备份和恢复一个mysql数据库,备份的编码如下,它工作正常

....
String command = "mysqldump --host=" + dataBase.getHost() + " --user=" + dataBase.getUserName() + " --password=" + dataBase.getPassword() + " "
                + dataBase.getDatabaseName() + " -r " + dataBase.getBackupPath() + "/ofm_mnu_backup_" + bkDate + ".sql";
        System.out.println(command);
        Process p = null;
        try {


            Runtime runtime = Runtime.getRuntime();
            p = runtime.exec(command);

            int processComplete = p.waitFor();

            if (processComplete == 0) {

                System.out.println("Backup created successfully");

            } else {
                System.out.println("Could not create the backup");
            }
....
但是当我尝试使用以下代码恢复数据库时,它不起作用,请帮助

  ........
    String command = "mysqldump --host=" + dataBase.getHost() + " --user="+dataBase.getUserName() + " --password= " + dataBase.getPassword()+""+dataBase.getDatabaseName() + "  " + dataBase.getBackupPath();
        Process p = null;

        try {
            System.out.println(command);
            Runtime runtime = Runtime.getRuntime();
            p = runtime.exec(command);
            int processComplete = p.waitFor();

            if (processComplete == 0) {
                System.out.println("Backup restored successfully");

            } else {
                System.out.println("Could not restore the backup");
            }
     ......

在谷歌搜索了这么多之后,我找到了我的问题的答案

  ......
  String[] executeCmd = new String[]{"mysql", [database], "--user=" + [username],"--password=" + [password], "-e", " source " + [absolute path to the sql file]};
  p = Runtime.getRuntime().exec(executeCmd);
  int processComplete = p.waitFor();
  ......
在上面的代码中,最重要的是**“source”+[sql文件的绝对路径]**在“source”字和文件路径之间不应该有逗号


这对我来说很有效,我希望对你们也同样有效。

我认为你们使用的
mysqldump
命令不太正确。您是否应该使用
字符来表示备份/恢复?对此进行了详细讨论。要备份,请执行以下操作:

String command = "mysqldump --host=" + dataBase.getHost() + " --user=" + dataBase.getUserName() + " --password=" + dataBase.getPassword() + " "
            + dataBase.getDatabaseName() + " > " + dataBase.getBackupPath() + "/ofm_mnu_backup_" + bkDate + ".sql";
以及恢复:

String command = "mysqldump --host=" + dataBase.getHost() + " --user=" + dataBase.getUserName() + " --password=" + dataBase.getPassword() + " "
            + dataBase.getDatabaseName() + " < " + dataBase.getBackupPath() + "/ofm_mnu_backup_" + bkDate + ".sql";
String command=“mysqldump--host=“+dataBase.getHost()+”--user=“+dataBase.getUserName()+”--password=“+dataBase.getPassword()+”“
+dataBase.getDatabaseName()+“<”+dataBase.getBackupPath()+“/ofm\u mnu\u backup\u“+bkDate+”.sql”;

可能是因为分配给终端的输出流。。。 是否可以在cmd中运行mysqldump命令? 比如说

String command = "cmd /K mysqldump..."
您可能也有兴趣阅读以下文章:


希望,这对恢复有帮助

 String comando = "C:\\MySQL\\bin\\mysql.exe  --host=localhost --port=3306 --user=root --password=123 < D:\\back.sql";
File f = new File("restore.bat");
FileOutputStream fos = new FileOutputStream(f);
fos.write(comando.getBytes());
fos.close();
Process run = Runtime.getRuntime().exec("cmd /C start restore.bat ");  
//使用dbpass和dbname更改dbpass和dbname int processComplete=p.waitFor()


但是您需要传递到mysql.exe和mysqldump.exe的确切路径,我要感谢大家对如何使用java代码恢复mysql数据库的支持。因为没有一个代码对我有效,但它给了我一个线索,让我柚木它工作

下面是我最后的工作代码

String[] executeCmd = new String[]{"C:\\xampp\\mysql\\bin\\mysql.exe",mydb, "--user=" + dbUserName, "--password=" + dbPassword, "-e", " source " + source};

必须设置Mysql\u home\bin的路径吗?noup我没有设置Mysql\u home\bin的路径,因为Mysql在我的服务器中作为一个服务运行->我更改了备份代码,正如您前面提到的,它在终端中正常工作,但当它放在java代码中时就不工作了。是否像processcomplete==0那样工作,或者其他一些问题?还有,你使用的是什么操作系统?好的,但是当你运行这个时会发生什么呢?例外?Processcomplete==0?说它能工作,但它不能?我没有例外,伙计,备份部分工作正常,但恢复不工作我使用system.out获得命令,当恢复发生时,然后将其复制到终端并运行,然后它能正常工作,String command=“mysqldump--host=“+dataBase.getHost()+”--user=“+dataBase.getUserName()”“--password=“+dataBase.getPassword()+”“+dataBase.getDatabaseName()+”<“+dataBase.getBackupPath();*********************>>>>mysqldump--host=127.0.0.1--user=root--password=ofm_mnu jvs@SuperTron-Processcomplete不等于0它是6
        if (processComplete == 0) {

            System.out.println("Backup created successfully!");

        } else {
            System.out.println("Could not create the backup");
        }


    } catch (Exception e) {
        e.printStackTrace();
    }
String[] executeCmd = new String[]{"C:\\xampp\\mysql\\bin\\mysql.exe",mydb, "--user=" + dbUserName, "--password=" + dbPassword, "-e", " source " + source};