How to restore a MySQL database backup using Java

旧巷老猫 提交于 2019-11-28 13:01:21
Runtime.getRuntime().exec("mysql -u username -ppassword database_name  FILE.sql")

This statement will regenerate database from the file

public static boolean restoreDB(String dbName, String dbUserName, String dbPassword, String source) {  
String[] executeCmd = new String[]{"mysql", "--user=" + dbUserName, "--password=" + dbPassword, dbName,"-e", " source "+source};  
Process runtimeProcess;  
try {  
runtimeProcess = Runtime.getRuntime().exec(executeCmd);  
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;  
}  

source example : "E:\\My Backup\\Test\\file.sql"

You have to use java swings where you can design forms. Here is some code which can do that.

import javax.swing.JFrame;

public final class RestoreMySQLDatabase extends JFrame {
    private static final long serialVersionUID = 1L;
    public static void main(String[] args) {
        RestoreMySQLDatabase restoreMySQL = new RestoreMySQLDatabase();
        restoreMySQL.setTitle("Restore mysql database");
        javax.swing.JButton butRestore = new javax.swing.JButton("Restore");
        butRestore.addActionListener(new java.awt.event.ActionListener(){
            public void actionPerformed(java.awt.event.ActionEvent event){
                try{
                    Runtime.getRuntime().exec("C:\\SCM Files\\SQL Backup\\mysqldump.exe -uroot -p123 rr -r\"C:\\SCM Files\\SQL Backup\\RR.sql");
                    javax.swing.JOptionPane.showMessageDialog((javax.swing.JButton)event.getSource(), "Successfully restored");
                }catch(java.lang.Exception e){
                    javax.swing.JOptionPane.showMessageDialog((javax.swing.JButton)event.getSource(), "Not able to restore");
                }
            }
        });
    }

}

You should try DbUnit for backup and restore of database.Here is the demo code for that:

    try {
        Class.forName(DBDRIVER);
        Connection jdbcConnection = DriverManager.getConnection(DBURL, DBUSERNAME, DBPASSWORD);
        IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
        connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
                    new MySqlDataTypeFactory());

         //////// Database backup
        ITableFilter filter = new DatabaseSequenceFilter(connection);
        IDataSet dataset = new FilteredDataSet(filter, connection.createDataSet());

        ExcludeTableFilter excludeFilter = new ExcludeTableFilter();
        excludeFilter.excludeTable("DATABASECHANGELOG*");
        IDataSet excludedataset = new FilteredDataSet(excludeFilter, dataset);
        FlatXmlDataSet.write(excludedataset, new FileOutputStream(backupfilename));

        System.out.println("\n Complete backup successful.");
         //////// Database backup


         //////// Database restore
        IDataSetProducer producer = new FlatXmlProducer(new InputSource(restoreFileName));
        IDataSet dataSet = new StreamingDataSet(producer);

        TransactionOperation operation = new TransactionOperation(DatabaseOperation.INSERT);
        operation.execute(connection, dataSet);
         //////// Database restore
    } catch (DatabaseUnitException e) {
        e.printStackTrace();
        flag = false;
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }

Use the same dump to import like this.

Process runProcess = Runtime.getRuntime().exec("C:\\SCM Files\\SQL Backup\\mysqldump.exe -uroot -p123 rr  database_name < "C:\\SCM Files\\SQL Backup\\RR.sql");
NithinS

For restore use the executeCmd in the form m.Torkashvand provided (array of strings). A working example on how to use these commands from JSP code can be found here

public static void mysqlExport(String host, String port, String user, String password, String dbname, String table, String folder, String query) {

    System.out.println("------ Exporting "+dbname+"."+table+" at "+folder+"---------------------------");
    try {
        String command = "mysqldump --host=" + host + " --port=" + port + " --user=" + user + " --password=" + password + " " + dbname + " " + table + " --where=\"" + query + "\" > " + folder + table + ".sql";
        System.out.println(command);
        int returnValue = executeCommand(Arrays.asList("mysqldump", "--host="+host, "--port="+port, "--user="+user, "--password="+password, dbname, table, "--where="+query), folder + table + ".sql");
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

public static void mysqlImport(String host, String port, String user, String password, String dbname, String table, String folder) {

    System.out.println("------ Importing "+dbname+"."+table+" at "+folder+"---------------------------");
    try {
        String command = "mysql --host=" + host + " --port=" + port + " --user=" + user + " --password=" + password + " " + dbname + " " + table + " < " + folder + table + ".sql";
        System.out.println(command);
        int returnValue = executeCommand(new String[]{"mysql", "--host="+host, "--port="+port,  "--user=" + user, "--password=" + password, dbname, "-e", "source " + folder + table + ".sql"});
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

public static int executeCommand(String[] commands) throws IOException
{
    System.out.println(commands.toString());
    Process process = Runtime.getRuntime().exec(commands);
    return dumpProcess(process);
}

public static int executeCommand(List<String> commands, String folder) throws IOException
{
    ProcessBuilder builder = new ProcessBuilder(commands);
    System.out.println(builder.command());
    builder.redirectOutput(new File(folder));
    Process process = builder.start();
    return dumpProcess(process);
}

public static int dumpProcess(Process process) throws IOException
{
    int returnValue = -1;
    try {
        String s = null;
        process.waitFor();
        returnValue = process.exitValue();
        if (returnValue == 0) {
            System.out.println("Command successful !!");
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
            System.out.println("Here is the standard output of the command:\n");
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }
        } else {
            System.out.println("Command failed. Exist Status code = "+returnValue);
            BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            System.out.println("Here is the standard error of the command (if any):\n");
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
        }

    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    return returnValue;
}

I tried this code and works as perfect!

String[] restoreCmd = new String[]{"mysql ", "--user=" + DB.DB_USERNAME, "--password=" + DB.DB_PASSWORD, "-e", "source " + pathToFile};
    try {
        Process runtimeProcess = Runtime.getRuntime().exec(restoreCmd);
        int processComplete = runtimeProcess.waitFor();
        if (processComplete == 0) {
            System.out.println("Done");
        } else {
            System.out.println("Failed");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!