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 数据库备份还原内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- SpringBoot项目集成Flyway进行数据库版本控制的详细教程
- SpringBoot整合Flyway的方法(数据库版本迁移工具)
- 浅谈SpringBoot之开启数据库迁移的FlyWay使用
- Springboot JPA 枚举Enum类型存入到数据库的操作
- SpringBoot连接使用PostgreSql数据库的方法
- springboot 启动时初始化数据库的步骤
- Springboot Mybatis-Plus数据库单元测试实战(三种方式)
- Springboot Druid 自定义加密数据库密码的几种方案
- springboot+idea+maven 多模块项目搭建的详细过程(连接数据库进行测试)
- SpringBoot 集成 Jasypt 对数据库加密以及踩坑的记录分享
- SpringBoot使用flyway初始化数据库
相关文章
SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log(方法步骤详解)
这篇文章主要介绍了SpringBoot通过redisTemplate调用lua脚本 并打印调试信息到redis log,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2020-02-02关于ThreadLocal对request和response的用法说明
这篇文章主要介绍了关于ThreadLocal对request和response的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-08-08jstl之map,list访问遍历以及el表达式map取值的实现
下面小编就为大家带来一篇jstl之map,list访问遍历以及el表达式map取值的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-03-03
最新评论