2012-02-01 2 views
1

Я был в состоянии создать резервную копию моего текущей базы данных MySQL как .SQL файл с помощью mysqldump.exe с помощью следующего кода Java.Как восстановить резервную копию базы данных MySQL с помощью Java

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

Теперь я хочу восстановить тот же самый .SQL резервную копию файл базы данных MySQL с помощью Java код, подобный выше на событие кнопки щелкнули.

Большое спасибо :)

Так что теперь я попробовал это; Process runProcess = Runtime.getRuntime().exec("C:\\SCM Files\\SQL Backup\\mysqldump.exe -uroot -p123 rr < C:\\SCM Files\\SQL Backup\\RR.sql"); Тем не менее он не работает:/

+0

Проделали ли вы что-нибудь по этому поводу? – Rocky

+1

Duplicate: http://stackoverflow.com/questions/4755552/how-to-import-sql-file-to-mysql-dump-using-cammand-line-in-windows (изменить: это не связано с Java , вы можете запустить любую команду таким образом, конечно.) –

ответ

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

Это заявление будет регенерировать базу данных из файла

+0

более конкретно -e "\. file.sql" или -e "source file.sql" см. [batch-mode] (http://dev.mysql.com /doc/refman/5.5/en/batch-mode.html), но использовать массив String – KCD

0

Вы должны попробовать DbUnit для резервного копирования и восстановления database.Here является демо-код, который:

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

Вы должны использовать Java качели, где вы можете форм дизайна. Вот какой код может это сделать.

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

} 
0

Используйте ту же свалку для импорта, как это.

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

Это не помогло:/ 'Process runProcess = Runtime.getRuntime(). exec (" C: \\ SCM Files \ \ SQL Backup \\ mysqldump.exe -uroot -p123 rr wishman

3
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: \\ Резервное копирование \\ Test \\ file.sql"

+0

+1 для cmd как строки [] not String – KCD

0

Для восстановления Используйте executeCmd в виде m.Torkashvand при условии (массив строк). Рабочий пример о том, как использовать эти команды из JSP-кода можно найти here

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

Я попробовал этот код и работает отлично!

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(); 
    } 
Смежные вопросы