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

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

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



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

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

  

  /**

    * 根据属性文件的配置导出指定位置的指定数据库到指定位置

    * 备份数据库

    *

    */

   public void export(){

      try {

        String command = getExportCommand();//拼接shell脚本命令字符串

        Runtime runtime = Runtime.getRuntime();

        runtime.exec(command);//执行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);

        // 选择数据库和要放在一起执行

        writer.write(cmdarray[1] + "\r\n" + cmdarray[2]);

        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();

      String username = properties.getProperty("user");// 用户名

      String password = properties.getProperty("password");// 用户密码

      String exportDatabaseName = properties.getProperty("databaseName");// 需要导出的数据库名

      String host = properties.getProperty("host");// 从哪个主机导出数据库,如果没有指定这个值,则默认取localhost

      String port = properties.getProperty("port");// 使用的端口号

      //创建以当前日期为名字的sql脚本文件名字

      SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");

      String backUpName = date.format(new Date());

      String exportPath = properties.getProperty("Url") + "/" +backUpName + ".sql";// 导出路径

 

      // 注意空格

      command.append("cmd.exe /cmysqldump -u").append(username)

           .append(" -p")

           .append(password)

           // 密码是用的小p,而端口是用的大P

           .append(" -h").append(host).append(" -P").append(port)

           .append(" ").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);

     

      String username = properties.getProperty("user");// 用户名

      String password = properties.getProperty("password");// 用户密码

      String exportDatabaseName = properties.getProperty("databaseName");// 需要导出/入的数据库名

      String host = properties.getProperty("host");// 从哪个主机导出数据库,如果没有指定这个值,则默认取localhost

      String port = properties.getProperty("port");// 使用的端口号

      String Url = properties.getProperty("Url");

     

      // 第一步,获取登录命令语句

      String loginCommand = new StringBuffer().append("mysql -u")

           .append(username).append(" -p").append(password).append(" -h")

           .append(host).append(" -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定时器,唯一一点是获取不到项目路径,所以我使用固定路径的方法来实现。
  • 以当前日期命令脚本文件名方式,实现备份功能。

 

 

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐