从Java简单备份和恢复mysql数据库

如何从java代码备份mysql数据库,以便:

  1. 它的保存路径是动态分配的。
  2. Path中的空格不会产生问题。
  3. 使用执行的jar文件生成路径。
  4. 动态分配DBname,DBusername或DBpass。
  5. 创建专用文件夹以保存备份文件。

注意:下面给出的代码是解决问题的一种方法,可能不是最好的方法。 代码中的一切都是可变的。 如果在环境变量中没有mysql,请在mysqldump和mysql之前添加路径(例如对于XAMPP,C:\ xampp \ mysql \ bin \ mysqldump)

(希望,这将解决您的问题。我花了一天时间来完全弄清楚所有事情并正确实施)

备份方法:

public static void Backupdbtosql() { try { /*NOTE: Getting path to the Jar file being executed*/ /*NOTE: YourImplementingClass-> replace with the class executing the code*/ CodeSource codeSource = YourImplementingClass.class.getProtectionDomain().getCodeSource(); File jarFile = new File(codeSource.getLocation().toURI().getPath()); String jarDir = jarFile.getParentFile().getPath(); /*NOTE: Creating Database Constraints*/ String dbName = "YourDBName"; String dbUser = "YourUserName"; String dbPass = "YourUserPassword"; /*NOTE: Creating Path Constraints for folder saving*/ /*NOTE: Here the backup folder is created for saving inside it*/ String folderPath = jarDir + "\\backup"; /*NOTE: Creating Folder if it does not exist*/ File f1 = new File(folderPath); f1.mkdir(); /*NOTE: Creating Path Constraints for backup saving*/ /*NOTE: Here the backup is saved in a folder called backup with the name backup.sql*/ String savePath = "\"" + jarDir + "\\backup\\" + "backup.sql\""; /*NOTE: Used to create a cmd command*/ String executeCmd = "mysqldump -u" + dbUser + " -p" + dbPass + " --database " + dbName + " -r " + savePath; /*NOTE: Executing the command here*/ Process runtimeProcess = Runtime.getRuntime().exec(executeCmd); int processComplete = runtimeProcess.waitFor(); /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/ if (processComplete == 0) { System.out.println("Backup Complete"); } else { System.out.println("Backup Failure"); } } catch (URISyntaxException | IOException | InterruptedException ex) { JOptionPane.showMessageDialog(null, "Error at Backuprestore" + ex.getMessage()); } } 

恢复方法:

 public static void Restoredbfromsql(String s) { try { /*NOTE: String s is the mysql file name including the .sql in its name*/ /*NOTE: Getting path to the Jar file being executed*/ /*NOTE: YourImplementingClass-> replace with the class executing the code*/ CodeSource codeSource = YourImplementingClass.class.getProtectionDomain().getCodeSource(); File jarFile = new File(codeSource.getLocation().toURI().getPath()); String jarDir = jarFile.getParentFile().getPath(); /*NOTE: Creating Database Constraints*/ String dbName = "YourDBName"; String dbUser = "YourUserName"; String dbPass = "YourUserPassword"; /*NOTE: Creating Path Constraints for restoring*/ String restorePath = jarDir + "\\backup" + "\\" + s; /*NOTE: Used to create a cmd command*/ /*NOTE: Do not create a single large string, this will cause buffer locking, use string array*/ String[] executeCmd = new String[]{"mysql", dbName, "-u" + dbUser, "-p" + dbPass, "-e", " source " + restorePath}; /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/ Process runtimeProcess = Runtime.getRuntime().exec(executeCmd); int processComplete = runtimeProcess.waitFor(); /*NOTE: processComplete=0 if correctly executed, will contain other values if not*/ if (processComplete == 0) { JOptionPane.showMessageDialog(null, "Successfully restored from SQL : " + s); } else { JOptionPane.showMessageDialog(null, "Error at restoring"); } } catch (URISyntaxException | IOException | InterruptedException | HeadlessException ex) { JOptionPane.showMessageDialog(null, "Error at Restoredbfromsql" + ex.getMessage()); } } 

如果Hibernate配置正确,这就是蛋糕:

 Session session = HibernateUtil.getSessionFactory().openSession(); // for every table, have the bean implement Serializable and use the next 4 lines List  tblCollection = session.createCriteria(TblBean.class).list(); FileOutputStream backup = new FileOutputStream("backupOf"+TblBean.getClass().getName()+".dat"); ObjectOutputStream backupWriter = new ObjectOutputStream(backup); backupWriter.write(tblCollection); 
 public static String getData(String host, String port, String user, String password, String db,String table) throws Exception { //an "C:/xampp/mysql/bin/mysqldump" ---- location ito han mysqldump Process run = Runtime.getRuntime().exec( "C:/xampp/mysql/bin/mysqldump --host=" + host + " --port=" + port + " --user=" + user + " --password=" + password + " --compact --databases --add-drop-table --complete-insert --extended-insert " + "--skip-comments --skip-triggers "+ db+" --tables "+table); InputStream in = run.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); StringBuffer temp = new StringBuffer(); int count; char[] cbuf = new char[BUFFER]; while ((count = br.read(cbuf, 0, BUFFER)) != -1) temp.append(cbuf, 0, count); br.close(); in.close(); return temp.toString(); }