一键备份mysql数据库

public void backup() throws IOException{
try {
if(null==po){
po = new SjkbfEntity();
}
po.setCjrq(new Date());
String bakDBname = DateTime.getCurrentDate_YYYYMMDDHHMMSSWithOutSeparator();//文件名

		Runtime runtime = Runtime.getRuntime();
        //-u后面是用户名,-p是密码-p后面最好不要有空格,-family是数据库的名字
        Process process = runtime.exec("mysqldump -u root -pnathan@lengwei‍ metro");
        InputStream inputStream = process.getInputStream();//得到输入流,写成.sql文件
        InputStreamReader reader = new InputStreamReader(inputStream);
        BufferedReader br = new BufferedReader(reader);
        String s = null;
        StringBuffer sb = new StringBuffer();
        while((s = br.readLine()) != null){
            sb.append(s+"\\r\\n");
        }
        s = sb.toString();
        System.out.println(s);
        File file = new File("D:/DBBACKUP/"+bakDBname+".sql");
        file.getParentFile().mkdirs();
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        fileOutputStream.write(s.getBytes());
        fileOutputStream.close();
        br.close();
        reader.close();
        inputStream.close();
        
		po.setSc("0");
		po.setYhid(getLoginUser());
		po.setBfdz("D:/DBBACKUP/"+bakDBname+".sql");
		service.save(po);

    
		/*方法一:
		 * Runtime rt = Runtime.getRuntime();
	   // 调用 调用mysql的安装目录的命令
	   Process child = rt
	     .exec("D://Program Files//MySQL//MySQL Server 5.0//bin//mysqldump -h localhost -uroot -proot cnr");
	   // 设置导出编码为utf-8。这里必须是utf-8
	   // 把进程执行中的控制台输出信息写入.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(
	     "D:/DBBACKUP/"+bakDBname+".sql");
	   OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
	   writer.write(outStr);
	   writer.flush();
	   in.close();
	   xx.close();
	   br.close();
	   writer.close();
	   fout.close();*/

		/*方法二
		 * String mssqlBackupPath = ServletActionContext.getServletContext()
				.getRealPath("/backup");
		String path = "\"" + mssqlBackupPath + "\\" + bakDBname + ".sql"
				+ "\"";// 备份生成的数据路径及文件名
		String str ="cmd /c mysqldump -h localhost -uroot -proot cnr >" + path;
		Runtime rt = Runtime.getRuntime();
		Process process = rt.exec(str);
		InputStreamReader isr = new InputStreamReader(process.getErrorStream());
		LineNumberReader input = new LineNumberReader(isr);
		String line;
		while ((line = input.readLine()) != null) {
			System.out.println(line + "~~~~~~~~~~");
		}*/
		
		
		/*方法三:
		 * Runtime rt = Runtime.getRuntime();
        // 调用 mysql 的 cmd:
        Process child = rt
                .exec("mysqldump -uroot -proot --set-charset=utf8 cnr");// 设置导出编码为utf8。这里必须是utf8

        // 把进程执行中的控制台输出信息写入.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(
                "D:/DBBACKUP/"+bakDBname+".sql");
        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) {
		logger.error(e.getMessage());
		e.printStackTrace();
		getResponseWriter().write("备份失败!");
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值