如何使用Java还原MySQL数据库备份

我能够使用mysqldump.exe在以下java代码的帮助下创建当前mysql数据库备份为.SQL文件。

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

现在我想在点击一个按钮的情况下使用与上面类似的java代码将同样的.SQL备份文件恢复到mysql数据库。

非常感谢 :)

所以现在我尝试了这个; Process runProcess = Runtime.getRuntime().exec("C:\\SCM Files\\SQL Backup\\mysqldump.exe -uroot -p123 rr < C:\\SCM Files\\SQL Backup\\RR.sql"); 它仍然没有用:/

 Runtime.getRuntime().exec("mysql -u username -ppassword database_name FILE.sql") 

此语句将从文件重新生成数据库

 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; } 

源示例:“E:\\ My Backup \\ Test \\ file.sql”

你必须使用java swing来设计表单。 这是一些可以做到这一点的代码。

 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"); } } }); } } 

你应该尝试DbUnit来备份和恢复数据库。这是它的演示代码:

  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(); } 

使用相同的转储像这样导入。

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

对于还原,请使用m.Torkashvandforms的executeCmd (字符串数组)。 可以在此处找到有关如何使用JSP代码中的这些命令的工作示例

 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 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; } 

我尝试了这段代码并且完美无缺!

 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(); }