Springboot 实现数据库备份还原
java1234
共 3035字,需浏览 7分钟
·
2020-09-23 18:29
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
作者 | Maolic
来源 | urlify.cn/ma6nqm
备份数据库
备份通过命令行对数据库导出到指定目录即可。我这里是一个Get请求,页面需要展示备份文件名称、大小和备份时间,代码中使用的log是Slf4j,最终界面效果如图:
代码对我的原代码有所改动,关于备份文件的存放目录,我配置在了application.properties配置文件中,通过一个配置类ProjectUrlConfig去获取,代码中的 projectUrlConfig.getBackPath() 即为文件目录,与fileName拼接成完整的路径。
/* 备份数据库 */
@GetMapping("backupSQL")
public ModelAndView backupSQL(Map 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 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);
}
以上即可对数据库进行备份与恢复,但是也只是适用于较小的数据库。
粉丝福利:108本java从入门到大神精选电子书领取
???
?长按上方锋哥微信二维码 2 秒 备注「1234」即可获取资料以及 可以进入java1234官方微信群
感谢点赞支持下哈
评论