SSH框架实现数据库备份与还原


一、   SSH下边数据库备份与还原工具类


  • l  该方法采用Shell命令,可以方便的实现数据库的备份功能
  • 查看过上一篇定时器配置的朋友可以发现该类已经放到Spring容器里面了,我们可以利用Spring注入的方式
  • Action请求来调用可以实现实时备份与还原
  • 利用Spring定时器,唯一一点是获取不到项目路径,所以我使用固定路径的方法来实现。
  • 以当前日期命令脚本文件名方式,实现备份功能。





二、   SSH数据库备份与还原工具类配合Spring定时器一块使用

                (定时器配置可以详细查看上一篇博客日志)

  

/**
    * 根据属性文件的配置导出指定位置的指定数据库到指定位置
    * 备份数据库
    *
    */
   public void export(){
      try {
//拼接shell脚本命令字符串
        Runtime runtime = Runtime.getRuntime();
//执行shell脚本
        System.out.println("数据库备份成功!");
      } catch (IOException e) {
        System.out.println("数据库备份异常!");
        e.printStackTrace();
      }
   }
 
    /**
    * 根据属性文件的配置导出指定位置的指定数据库到指定位置
    * 备份数据库
    *
    */
 
public void importSql(String url){
      Runtime runtime = Runtime.getRuntime();
// 因为在命令窗口进行mysql数据库的导入一般分三步走,所以所执行的命令将以字符串数组的形式出现
      String cmdarray[];
      try {
        cmdarray = getImportCommand(url);
        Process process = runtime.exec(cmdarray[0]);
// 执行了第一条命令登录到mysql
// 进程执行后面的代码
        OutputStream os = process.getOutputStream();
        OutputStreamWriter writer = new OutputStreamWriter(os);
// 选择数据库和要放在一起执行
"\r\n"
        writer.flush();
        writer.close();
        os.close();
        System.out.println("数据库还原成功!");
      } catch (IOException e) {
        System.out.println("数据库还原异常!");
        e.printStackTrace();
      }
   }
 
 
private String getExportCommand() throws IOException {
      InputStream is = DataUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");//加载属性配置文件
      Properties properties = new Properties();
      properties.load(is);
     
      StringBuffer command = new StringBuffer();
"user");// 用户名
"password");// 用户密码
"databaseName");// 需要导出的数据库名
"host");// 从哪个主机导出数据库,如果没有指定这个值,则默认取localhost
"port");// 使用的端口号
//创建以当前日期为名字的sql脚本文件名字
      SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
      String backUpName = date.format(new Date());
"Url") + "/" +backUpName + ".sql";// 导出路径
 
// 注意空格
"cmd.exe /cmysqldump -u").append(username)
" -p")
           .append(password)
// 密码是用的小p,而端口是用的大P。
" -h").append(host).append(" -P").append(port)
" ").append(exportDatabaseName).append(" -r ")
           .append(exportPath);
      return command.toString();
   }
 
private String[] getImportCommand(String path) throws IOException {
      InputStream is = DataUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");//加载属性配置文件
      Properties properties = new Properties();
      properties.load(is);
     
"user");// 用户名
"password");// 用户密码
"databaseName");// 需要导出/入的数据库名
"host");// 从哪个主机导出数据库,如果没有指定这个值,则默认取localhost
"port");// 使用的端口号
"Url");
     
// 第一步,获取登录命令语句
      String loginCommand = new StringBuffer().append("mysql -u")
" -p").append(password).append(" -h")
" -P").append(port).toString();
// 第二步,获取切换数据库到目标数据库的命令语句
      String switchCommand = new StringBuffer("use ").append(exportDatabaseName).toString();
// 第三步,获取导入的命令语句
      String importCommand = new StringBuffer("source ").append(Url).append(path).toString();
// 需要返回的命令语句数组
      String[] commands = new String[] { loginCommand, switchCommand,
           importCommand };
      return commands;
   }

 

二、   SSH下边数据库备份与还原工具类

l  该方法采用Shell命令,可以方便的实现数据库的备份功能l  查看过上一篇定时器配置的朋友可以发现该类已经放到Spring容器里面了,我们可以利用Spring注入的方式,利用Action请求来调用可以实现实时备份与还原利用Spring定时器,唯一一点是获取不到项目路径,所以我使用固定路径的方法来实现。以当前日期命令脚本文件名方式,实现备份功能。