java 实现mysql备份数据库功能

最近新的项目中有个需求,要求实现mysql远程备份数据库功能,参考网上各种文章,走了不少弯路,特此记录分享:

 首先在windows 系统下面 通过命令行实现数据库备份功能如下:

D:/MySQL/bin/mysqldump -h localhost -p3306 -uroot -p123456 database_name > D:\test.sql

上面  D:/MySQL/bin/mysqldump 指的是运行mysql安装目录下mysqldump.exe

   -h localhost 数据库地址 -p3306 端口号,默认可以省略 -uroot 用户名 -p123456 密码  database_name 备份的数据库名称   
    D:\test.sql 生成备份文件 目录及名称(自定义)

下面附上java代码实现方法

  public static boolean exportDatabaseTool(){     
      try {
            Runtime rt = Runtime.getRuntime();
            // 调用 调用mysql的安装目录的命令
            Process child = rt.exec("cmd /c D:/MySQL/bin/mysqldump -h localhost -uroot -p123456 mysql ");
            // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
            InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
            InputStreamReader xx = new InputStreamReader(in, "utf-8");
            // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
             String inStr;
            StringBuffer sb = new StringBuffer("");
            String outStr;
            // 组合控制台输出信息字符串
            BufferedReader br = new BufferedReader(xx);
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
            }
            outStr = sb.toString();

            // 要用来做导入用的sql目标文件:
            FileOutputStream fout = new FileOutputStream("E:\\database\\20180628.sql");
            OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
            writer.write(outStr);
            writer.flush();
            in.close();
            xx.close();
            br.close();
            writer.close();
            fout.close();

            if(child.waitFor() == 0){//0 表示线程正常终止。
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

你可能感兴趣的:(java后台)