- 通常在MySQL數據庫的備份和恢復的時候,多是采用在cmd中執行mysql命令來實現。
例如:
mysqldump -h127.0.0.1 -uroot -ppass test > d:/test.sql ---備份test數據庫到 D 盤
mysql -h127.0.0.1 -uroot -ppass test< test.sql ---將D備份的數據庫腳本,恢復到數據庫中
更多命令參看:http://www.cnblogs.com/xcxc/archive/2013/01/30/2882840.html
- 今天采用Java代碼,來實現數據庫的備份。
-
- 在cmd調用命令行,其實是調用 mysql安裝路徑下面的bin目錄下面的 msqldump.exe和mysql.exe來完成相應的工作
- 所以,在java代碼中,我們也需要通過調用 mysqldump.exe和mysql.exe來完成備份和恢復的工作
- Runtime.getRuntime().exec(String args); java調用外部軟件exe執行命令的api ,具體參看:http://www.cnblogs.com/tohxyblog/p/6501396.html
-
- 數據庫備份具體代碼
/** * @param hostIP ip地址,可以是本機也可以是遠程 * @param userName 數據庫的用戶名 * @param password 數據庫的密碼 * @param savePath 備份的路徑 * @param fileName 備份的文件名 * @param databaseName 需要備份的數據庫的名稱 * @return */ public static boolean backup(String hostIP, String userName, String password, String savePath, String fileName, String databaseName) { fileName +=".sql"; File saveFile = new File(savePath); if (!saveFile.exists()) {// 如果目錄不存在 saveFile.mkdirs();// 創建文件夾 } if (!savePath.endsWith(File.separator)) { savePath = savePath + File.separator; } //拼接命令行的命令 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("mysqldump").append(" --opt").append(" -h").append(hostIP); stringBuilder.append(" --user=").append(userName).append(" --password=").append(password) .append(" --lock-all-tables=true"); stringBuilder.append(" --result-file=").append(savePath + fileName).append(" --default-character-set=utf8 ") .append(databaseName); try { //調用外部執行exe文件的javaAPI Process process = Runtime.getRuntime().exec(stringBuilder.toString()); if (process.waitFor() == 0) {// 0 表示線程正常終止。 return true; } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return false; }
- 數據庫恢復代碼
/** * @param filepath 數據庫備份的腳本路徑 * @param ip IP地址 * @param database 數據庫名稱 * @param userName 用戶名 * @param password 密碼 * @return */ public static boolean recover(String filepath,String ip,String database, String userName,String password) { String stmt1 = "mysqladmin -h "+ip+" -u "+userName+" -p"+password+" create "+database; String stmt2 = "mysql -h "+ip+" -u "+userName+" -p "+password+" "+database+" < " + filepath; String[] cmd = { "cmd", "/c", stmt2 }; try { Runtime.getRuntime().exec(stmt1); Runtime.getRuntime().exec(cmd); System.out.println("數據已從 " + filepath + " 導入到數據庫中"); } catch (IOException e) { e.printStackTrace(); return false; } return true; }