之前對電腦重裝了一下,結果IDEA的項目目錄沒有備份,導致有幾個平時會拿來參考的項目都丟失了,尤其有一個自己寫的Springboot項目當初沒有備份,這次是徹底無緣再見了,有的東西可以對外(開源)的還是放在博客園這些地方記錄一下比較不錯,偶爾再遇到這樣的問題Ctrl+C&Ctrl+V即可解決了。
這回記錄一下Springboot實現對數據庫進行一個備份和通過備份數據對數據庫進行恢復。當然不限于Springboot,對數據庫備份還原中的代碼,Java 相關的都可以使用。
備份數據庫
備份通過命令行對數據庫導出到指定目錄即可。我這里是一個Get請求,頁面需要展示備份文件名稱、大小和備份時間,代碼中使用的log是Slf4j,最終界面效果如圖:
代碼對我的原代碼有所改動,關于備份文件的存放目錄,我配置在了application.properties配置文件中,通過一個配置類ProjectUrlConfig去獲取,代碼中的projectUrlConfig.getBackPath()即為文件目錄,與fileName拼接成完整的路徑。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/* 備份數據庫 */ @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 來實現。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
@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( "【還原數據庫】失敗:{}" , e.getMessage()); map.put( "msg" , e.getMessage()); return new ModelAndView( "common/error" , map); } log.info( "【還原數據庫】成功,還原文件:{}" , fileName); map.put( "msg" , "還原數據庫成功" ); return new ModelAndView( "common/success" , map); } |
以上即可對數據庫進行備份與恢復,但是也只是適用于較小的數據庫。
參考文章:https://blog.csdn.net/duli3554197/article/details/89468758
總結
到此這篇關于Springboot 實現數據庫備份還原的文章就介紹到這了,更多相關Springboot 數據庫備份還原內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/shenyuanfeng/p/13698456.html