1. 程式人生 > 程式設計 >Springboot 實現資料庫備份還原的方法

Springboot 實現資料庫備份還原的方法

  之前對電腦重灌了一下,結果IDEA的專案目錄沒有備份,導致有幾個平時會拿來參考的專案都丟失了,尤其有一個自己寫的Springboot專案當初沒有備份,這次是徹底無緣再見了,有的東西可以對外(開源)的還是放在部落格園這些地方記錄一下比較不錯,偶爾再遇到這樣的問題Ctrl+C&Ctrl+V即可解決了。

  這回記錄一下Springboot實現對資料庫進行一個備份和通過備份資料對資料庫進行恢復。當然不限於Springboot,對資料庫備份還原中的程式碼,Java 相關的都可以使用。

備份資料庫

  備份通過命令列對資料庫匯出到指定目錄即可。我這裡是一個Get請求,頁面需要展示備份檔名稱、大小和備份時間,程式碼中使用的log是Slf4j,最終介面效果如圖:

Springboot 實現資料庫備份還原的方法

  程式碼對我的原始碼有所改動,關於備份檔案的存放目錄,我配置在了application.properties配置檔案中,通過一個配置類ProjectUrlConfig去獲取,程式碼中的projectUrlConfig.getBackPath()即為檔案目錄,與fileName拼接成完整的路徑。

 /* 備份資料庫 */
  @GetMapping("backupSQL")
  public ModelAndView backupSQL(Map<String,Object> map){
    String fileName = "backup_" + new Date().getTime() + ".sql";
    String cmd = "mysqldump -uroot -p123456 dbName > " + projectUrlConfig.getBackPath() + fileName; //-u後的root為mysql資料庫使用者名稱,-p後接的123456為該使用者密碼,注意不要有空格;dbName填寫需要備份資料的資料庫名稱,大於號後接生成檔案路徑
    try {
      Runtime.getRuntime().exec(cmd);
    }catch (Exception e){
      log.error("【備份資料庫】失敗:{}",e.getMessage());
      map.put("msg",e.getMessage());
      return new ModelAndView("common/error",map);
    }
    log.info("【備份資料庫】成功,SQL檔案:{}",fileName);
    map.put("msg","備份資料庫成功");return new ModelAndView("common/success",map);
  }

恢復資料庫

  備份雖然在cmd命令列中使用 “mysql -uroot -p123456 dbName < SQL檔案路徑” 可以對資料庫還原,嘗試使用時沒有發現報錯但資料庫並未還原,最後通過OutputStreamWriter 來實現。

 @GetMapping("rollback")
  public ModelAndView rollback(@RequestParam("filename") String fileName,Map<String,Object> map){
    String path = projectUrlConfig.getBackPath() + fileName;
    try {
      Runtime runtime = Runtime.getRuntime();
      Process process = runtime.exec("mysql -uroot -p123456 --default-character-set=utf8 dbName");
      OutputStream outputStream = process.getOutputStream();
      FileInputStream fis = new FileInputStream(path);
      InputStreamReader isr = new InputStreamReader(fis,"utf-8");
      BufferedReader br = new BufferedReader(isr);
      String str = null;
      StringBuffer sb = new StringBuffer();
      while ((str = br.readLine()) != null) {
        sb.append(str + "\r\n");
      }
      str = sb.toString();
      OutputStreamWriter writer = new OutputStreamWriter(outputStream,"utf-8");
      writer.write(str);
      writer.flush();
      if(writer!=null){
        writer.close();
      }
      if(br!=null){
        br.close();
      }
      if(isr!=null){
        isr.close();
      }
      if(fis!=null){
        fis.close();
      }
      if(outputStream!=null){
        outputStream.close();
      }
    }catch (Exception e){
      log.error("【還原資料庫】失敗:{}",map);
    }
    log.info("【還原資料庫】成功,還原檔案:{}","還原資料庫成功");return new ModelAndView("common/success",map);
  }

  以上即可對資料庫進行備份與恢復,但是也只是適用於較小的資料庫。

  參考文章:https://blog.csdn.net/duli3554197/article/details/89468758

總結

到此這篇關於Springboot 實現資料庫備份還原的文章就介紹到這了,更多相關Springboot 資料庫備份還原內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!