Springboot 实现数据库备份还原的方法

 更新时间:2020年09月21日 08:42:51   作者:Maolic  
这篇文章主要介绍了Springboot 实现数据库备份还原的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  之前对电脑重装了一下,结果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

总结

到此这篇关于Springboot 实现数据库备份还原的文章就介绍到这了,更多相关Springboot 数据库备份还原内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java的List集合框架之LinkedList详细解析

    Java的List集合框架之LinkedList详细解析

    这篇文章主要介绍了Java的List集合框架之LinkedList详细解析,LinkedList底层是内部Node类的存储,prev、next、item值,同时最外层还有first、last节点,需要的朋友可以参考下
    2023-11-11
  • SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log(方法步骤详解)

    SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log(方法步骤详解)

    这篇文章主要介绍了SpringBoot通过redisTemplate调用lua脚本 并打印调试信息到redis log,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 使用Criteria进行分组求和、排序、模糊查询的实例

    使用Criteria进行分组求和、排序、模糊查询的实例

    这篇文章主要介绍了使用Criteria进行分组求和、排序、模糊查询的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • @Value设置默认值后,获取不到配置值的原因分析

    @Value设置默认值后,获取不到配置值的原因分析

    这篇文章主要介绍了@Value设置默认值后,获取不到配置值的原因,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • java 实现将一个string保存到txt文档中

    java 实现将一个string保存到txt文档中

    今天小编就为大家分享一篇java 实现将一个string保存到txt文档中的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • springboot常用语法库的基本语法

    springboot常用语法库的基本语法

    FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具,这篇文章主要介绍了springboot常用语法库的基本语法,需要的朋友可以参考下
    2022-12-12
  • 一文带你学会Java网络编程

    一文带你学会Java网络编程

    网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。这篇文章将带大家深入了解一下Java的网络编程,需要的可以了解一下
    2022-08-08
  • 关于ThreadLocal对request和response的用法说明

    关于ThreadLocal对request和response的用法说明

    这篇文章主要介绍了关于ThreadLocal对request和response的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 基于JAVA中的四种JSON解析方式详解

    基于JAVA中的四种JSON解析方式详解

    这篇文章主要介绍了基于JAVA中的四种JSON解析方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • jstl之map,list访问遍历以及el表达式map取值的实现

    jstl之map,list访问遍历以及el表达式map取值的实现

    下面小编就为大家带来一篇jstl之map,list访问遍历以及el表达式map取值的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论