java 实现 MySql数据库的备份,还原。

package com.jk.util;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.UUID;


/**
 * MySQL数据库备份
 * 
 */
public class MySQLDatabaseBackup {


	/**
	 * 备份数据库为*.sql
	 * 
	 * @author GaoHuanjie edit by lxx 2017年12月1日 19:09:56
	 * @param hostIP
	 *            MySQL数据库所在服务器地址IP
	 * @param userName
	 *            进入数据库所需要的用户名
	 * @param password
	 *            进入数据库所需要的密码
	 * @param savePath
	 *            数据库导出文件保存路径
	 * @param fileName
	 *            数据库导出文件文件名
	 * @param databaseName
	 *            要导出的数据库名
	 * @return 返回true表示导出成功,否则返回false。 如果mysql安装目录有空格,如program File(X86)/,
	 *         则需要将mysql/bin/mysqldump.exe复制到c盘根目录
	 */
	public static boolean exportDatabaseTool(String hostIP, String userName, String password, String savePath,
			String databaseName) throws InterruptedException {
		// --start--
		// 复制mysql安装路径bin/mysqldump.exe,到C盘根目录,定义这个路径
		// 根据库名生成随机备份文件,不覆盖
		String mysqldumPath = "C:\\";
		String fileName = databaseName + "_backup_";
		// 文件夹存在,则生成新备份文件,避免覆盖以前的
		fileName += UUID.randomUUID() + ".sql";
		// --end--


		File saveFile = new File(savePath);
		if (!saveFile.exists()) {// 如果目录不存在
			saveFile.mkdirs();// 创建文件夹
		}
		if (!savePath.endsWith(File.separator)) {
			savePath = savePath + File.separator;
		}


		PrintWriter printWriter = null;
		BufferedReader bufferedReader = null;
		try {
			printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
			Process process = Runtime.getRuntime().exec("cmd /c " + mysqldumPath + "\\mysqldump -h" + hostIP + " -u"
					+ userName + " -p" + password + " --set-charset=UTF8 " + databaseName);


			/*
			 * Process process = Runtime.getRuntime().exec(" mysqldump -h" +
			 * hostIP + " -u" + userName + " -p" + password +
			 * " --set-charset=UTF8 " + databaseName);
			 */
			InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
			bufferedReader = new BufferedReader(inputStreamReader);
			String line;
			while ((line = bufferedReader.readLine()) != null) {
				printWriter.println(line);
			}
			printWriter.flush();
			if (process.waitFor() == 0) {// 0 表示线程正常终止。
				System.err.println("数据库成功备份!!!");
				return true;
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (bufferedReader != null) {
					bufferedReader.close();
				}
				if (printWriter != null) {
					printWriter.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.err.println("数据库成功失败!!!");
		return false;
	}


	/**
	 * <pre>restore(数据库还原)   
	 * 创建人:lengXiaXi
	 * 创建时间:2017年12月11日 上午10:37:23    
	 * 修改人:lengXiaXi       
	 * 修改时间:2017年12月11日 上午10:37:23    
	 * 修改备注: 
	 * @param exePath mysql.exe的路径
	 * @param databaseName 要还原的库名
	 * @param sqlPath sql备份文件的路径
	 * </pre>
	 */
	public static void restore(String exePath, String databaseName, String sqlPath,String userName,String userPassword) {
		try {
			Runtime runtime = Runtime.getRuntime();
			Process process = runtime
					.exec(exePath + " -hlocalhost -u"+userName+" -p"+userPassword+" --default-character-set=utf8 " + databaseName);
			OutputStream outputStream = process.getOutputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(sqlPath), "utf-8"));
			String str = null;
			StringBuffer sb = new StringBuffer();
			while ((str = br.readLine()) != null) {
				sb.append(str + "\r\n");
			}
			str = sb.toString();
			System.err.println(str);
			OutputStreamWriter writer = new OutputStreamWriter(outputStream, "utf-8");
			writer.write(str);
			writer.flush();
			outputStream.close();
			br.close();
			writer.close();
			System.err.println("数据库还原成功");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


	/*
	 * public static String fPath="D:/test.sql"; public static String comman=
	 * " F:/soft/javaSoft/mysql免安装/3307/master-3307/bin/mysql -uroot -proot --default-character-set=utf8 test "
	 * ;
	 * 
	 * public static void hy() throws IOException{ Runtime rt =
	 * Runtime.getRuntime(); Process child = rt.exec(comman);
	 * 
	 * InputStreamReader in =new InputStreamReader(new
	 * FileInputStream(fPath),"UTF-8"); BufferedReader br =new
	 * BufferedReader(in);
	 * 
	 * String inStr =null; StringBuffer sb = new StringBuffer(""); String
	 * outStr; while((inStr=br.readLine())!=null){ sb.append(inStr + "\r\n"); }
	 * outStr = sb.toString();
	 * 
	 * System.err.println(outStr);
	 * 
	 * OutputStream out = child.getOutputStream(); OutputStreamWriter writer
	 * =new OutputStreamWriter(out,"UTF-8"); writer.write(outStr);
	 * writer.flush();
	 * 
	 * out.flush(); out.close(); br.close(); writer.close();
	 * System.err.println("数据回复成功!"); }
	 */


	public static void main(String[] args) {
		/*
		 * try { if (exportDatabaseTool("127.0.0.1", "root", "root", "d://",
		 * "erp")) { System.err.println("数据库成功备份!!!"); } else {
		 * System.err.println("数据库备份失败!!!"); } } catch (InterruptedException e)
		 * { e.printStackTrace(); }
		 */
		restore("F:/soft/javaSoft/mysql免安装/3307/master-3307/bin/mysql", "test","d:/test.sql","root","root");
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值