1. 程式人生 > >[知了堂學習筆記]_Java代碼實現MySQL數據庫的備份與還原

[知了堂學習筆記]_Java代碼實現MySQL數據庫的備份與還原

數據庫名 dsw -o string data except 文件夾 user lock

  • 通常在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;
    }

以上為今天的所有分享,如需了解更加深入的知識,

    請大家進入知了堂社區:http://www.zhiliaotang.com/portal.php;

    轉載請註明出處;
    請大家多多指教!歡迎提意見,非誠勿擾!!!
                     ---By GET_CHEN

[知了堂學習筆記]_Java代碼實現MySQL數據庫的備份與還原