前言

为了应对项目中数据库突然奔溃,导致丢失数据,这时可以通过代码实现数据库的定时备份与恢复,即使数据库宕机了,我们也可以将之前备份好的数据信息还原到数据库。通过java代码实现数据库的备份与恢复,其实就是通过java代码操作命令行。


那么如何实现数据库的备份与恢复呢,下面案例可供参考。

一、数据库备份

  /*** 数据库文件备份*/@RequestMapping("/doBackup")public R doBackup(){System.out.println("现在时间是"+new Date());Runtime runtime = Runtime.getRuntime();  //获取Runtime实例String database1 = "equipments"; // 需要备份的数据库名Date currentDate = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");String sdfDate = sdf.format(currentDate);String filepath = "d:\\sql\\time_" + sdfDate + ".sql"; // 备份的路径地址//执行命令(此处需要定位到mysqldump.exe路径,--default-character-set=gbk是为了解决中文乱码问题)String stmt = "d:\\wamp64\\bin\\mysql\\mysql5.7.24\\bin\\mysqldump -h localhost -uroot -p12345678 --default-character-set=gbk "+database1+" > "+filepath;System.out.println(stmt);try {String[] command = { "cmd", "/c", stmt};Process process = runtime.exec(command);InputStream input = process.getInputStream();System.out.println(IOUtils.toString(input, "UTF-8"));//若有错误信息则输出InputStream errorStream = process.getErrorStream();System.out.println(IOUtils.toString(errorStream, "gbk"));//保存备份数据信息到数据库中SqlFileEntity sqlFileEntity = new SqlFileEntity();sqlFileEntity.setName("time_" + sdfDate + ".sql");sqlFileEntity.setPath(filepath);sqlFileEntity.setCreateTime(currentDate);this.save(sqlFileEntity);} catch (IOException e) {e.printStackTrace();}return R.ok();}

二、数据库恢复

  /*** 还原数据库*/@RequestMapping("/restore")public R restore(@RequestBody String filename) {String database = "equipments"; // 需要备份的数据库名System.out.println("现在时间是" + new Date());Runtime runtime = Runtime.getRuntime();try {String filePath =  "d:\\sql\\"+filename; // sql文件路径String stmt = "mysql -h localhost -uroot -p12345678 "+database+"< " + filePath;System.out.println(stmt);String[] command = {"cmd", "/c", stmt};Process process = runtime.exec(command);//若有错误信息则输出InputStream errorStream = process.getErrorStream();System.out.println(IOUtils.toString(errorStream, "gbk"));//等待操作int processComplete = process.waitFor();if (processComplete == 0) {System.out.println("还原成功.");} else {throw new RuntimeException("还原数据库失败.");}} catch (Exception e) {e.printStackTrace();}return R.ok();}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了java代码实现数据库的备份与恢复,如果要实现数据库的定时备份与恢复,还需要编写定时器或者定时任务,将数据库的备份与恢复添加到定时任务中即可。

java实现数据库备份与恢复相关推荐

  1. 在sqlyog进行数据库的备份_MySQL数据库备份与恢复(收藏+1)

    MySQL数据库备份与恢复 尽管采取了一些管理措施来保证数据库的安全,但是在不确定的意外情况下,总是有可能造成数据的损失. 例如,意外的停电,不小心的操作失误等都可能造成数据的丢失. 所以为了保证数据 ...

  2. 在sqlyog进行数据库的备份_MYSQL数据库备份与恢复(收藏)

    MySQL数据库备份与恢复 尽管采取了一些管理措施来保证数据库的安全,但是在不确定的意外情况下,总是有可能造成数据的损失. 例如,意外的停电,不小心的操作失误等都可能造成数据的丢失. 所以为了保证数据 ...

  3. 将前台日期格式转成与数据库日期格式相对应,后台java转数据库日期格式

    前台到后台java时data日期类型的转化 在实体类中用@DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 @XmlElement(name=&q ...

  4. Java获取数据库表的字段信息,及如何将ResultSet转为json

    为什么80%的码农都做不了架构师?>>>    一.Java获取数据库表的各个字段的相关信息 在某些开发情景中,需要获取数据库中表的各个字段的相关信息,如字段名,字段类型,字段大小等 ...

  5. Oracle数据库备份与恢复的三种方法

    Oracle数据库备份与恢复的三种方法 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/ ...

  6. linux数据库都备份什么,Linux运维学习之数据库备份与恢复

    今天给大家带来的是关于数据库备份与恢复的教程,当我们手贱或者不知道什么原因导致数据库的崩溃,甚至删除数据库时怎么办,总不能跑路吧?所以我们做好日常的备份和相关的灾后重建很有必要. 那么备份都有什么方式 ...

  7. java servlet 数据库_Java Servlet调用数据库复习

    首先要导入jar包. 剩下的基本就是模版式的代码了: public class main { // JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = ...

  8. java获取数据库MetaData

    java获取数据库MetaData ​ 元数据(MetaData),即数据的描述信息的数据(表).数据库的表的表名,表的属性名,表的存储位置,表的列数啊等等都是表的描述信息,而这些描述信息就是元数据啦 ...

  9. java 从数据库取值_JAVA操作数据库--从一张表中取值,经过判断,然后插入另一张表中。...

    JAVA操作数据库-->从一张表中取值,经过判断,然后插入另一张表中. SQL语句如下:两张表 weather 和 weather_process. id均为自动增长.Oracle中采用序列 S ...

最新文章

  1. 快速排序(快排)--->注释超详细
  2. 集成学习python_从Boosting到Stacking,概览集成学习的方法与性能
  3. auto.js停止所有线程_十年架构师带你快速上手多线程
  4. iOS判断是模拟器还是真机
  5. Ribbon-2通过代码自定义配置ribbon
  6. android前台进程视频教程,Android Twilio视频通话,唤醒应用程序并进入前台
  7. java读取yaml配置文件,snakeyaml读取yaml配置文件
  8. java实现linux变量替换_linux java 配置 含环境变量 | 学步园
  9. Lesson6 how to use HTML QT Widgets
  10. 【转】缺少servlet-api.jar包
  11. OSPF中 HELL0包解析
  12. 局域网服务器共享文件夹设置,局域网服务器共享文件访问权限管理方法
  13. win7计算机管理没有用户模块,Win7系统下安装ipx协议提示找不到相应的模块如何解决...
  14. arduino入门-用arduino uno制作基于蓝牙的数据监控系统
  15. 使用计算机求解问题首先要,基于计算机的问题求解,首先要完成的是( )
  16. 硬核 | Redis Pub/Sub 发布订阅与宅男有什么关系?
  17. 盖茨基金会:全球至少要到2108年才能实现性别平等,比期望晚了三代人 | 美通社头条...
  18. 来自Bitly的USA.gov数据
  19. Django 数据库相关操作 (六)
  20. CSAPP第三章(续)

热门文章

  1. RESTEasy底层使用Netty
  2. excel表格如何对比两张成绩单的成绩
  3. Android Program type already present问题解决
  4. 在浏览器中使用tensorflow.js进行人脸识别的JavaScript API
  5. 读书·2022(20)
  6. JS声明二维数组常见办法
  7. 操作系统是如何获取键盘按键的
  8. 正文内容过长时,offsetHeight的获取和监听变化
  9. 计算机毕业设计Java网上投稿管理系统(源码+系统+mysql数据库+Lw文档)
  10. 【虫师--系列】JMeter基础之--元件的作用域与执行顺序