ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Springboot 实现数据库备份还原

2020-09-20 03:01:18  阅读:254  来源: 互联网

标签:map Springboot 备份 fileName new null 数据库


  之前对电脑重装了一下,结果IDEA的项目目录没有备份,导致有几个平时会拿来参考的项目都丢失了,尤其有一个自己写的Springboot项目当初没有备份,这次是彻底无缘再见了,有的东西可以对外(开源)的还是放在博客园这些地方记录一下比较不错,偶尔再遇到这样的问题Ctrl+C&Ctrl+V即可解决了。

  这回记录一下Springboot实现对数据库进行一个备份和通过备份数据对数据库进行恢复。当然不限于Springboot,对数据库备份还原中的代码,Java 相关的都可以使用。

 

备份数据库

  备份通过命令行对数据库导出到指定目录即可。我这里是一个Get请求,页面需要展示备份文件名称、大小和备份时间,代码中使用的log是Slf4j,最终界面效果如图:

 

  代码对我的原代码有所改动,关于备份文件的存放目录,我配置在了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("【还原数据库】失败:{}", 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

 

标签:map,Springboot,备份,fileName,new,null,数据库
来源: https://www.cnblogs.com/shenyuanfeng/p/13698456.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有