Java 在Window及Linux下备份MySQL数据库(2)

System.out.println(BakMysql.class.getResource("").toString());
            Runtime rt = Runtime.getRuntime();
            // 调用 mysql 的 cmd:
            // Process child = rt.exec("cmd /c mysqldump -uroot -pjwl shequ");
            Process child = rt.exec("mysqldump -uroot -pjwl shequ");
            // 设置导出编码为utf8,这里必须是utf8。
            // 注意这一句,是指运行mysqldump命令,后面跟的是登录名和登录的密码,接着后面的是指备份的数据库的名字,到此结束,
            // 以此生成一个执行的进程,取得此进程的输出流到我们要备份的文件
            // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
            InputStream in = child.getInputStream();
            // 控制台的输出信息作为输入流
            InputStreamReader xx = new InputStreamReader(in, "utf8");
            // 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
            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(filePath);
            OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
            writer.write(outStr);// 写文件
            // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
            writer.flush();
            // 别忘记关闭输入输出流
            in.close();
            xx.close();
            br.close();
            writer.close();
            fout.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public String backupMySqlToFile() {
        String outStr = "";
        try {
            Runtime rt = Runtime.getRuntime();
            Process child = rt
                    .exec("D:\\Program Files\\Apache Software Foundation\\xampp\\mysql\\bin\\mysqldump -uroot -p1234 114la");
            // 设置导出编码为utf8。 这里必须是utf8在此要注意 ,
            // 有时会发生一个mysqldump:
            // Got error: 1045的错误,此时mysqldump必须加上你要备份的数据库的IP地址,即
            // mysqldump -h192.168.0.1 -uroot -pmysql dbname,今天我就遇到了这样的问题,呵呵
            // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。
            // 注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
            InputStream in = child.getInputStream();
            // 控制台的输出信息作为输入流
            InputStreamReader xx = new InputStreamReader(in, "utf8");
            // 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
            String inStr;
            StringBuffer sb = new StringBuffer("");
            // 组合控制台输出信息字符串
            BufferedReader br = new BufferedReader(xx);
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
            }
            outStr = sb.toString();
            in.close();
            xx.close();
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return outStr;
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwsddy.html