java web 实现mysql 数据库备份、恢复

如题,由于项目需要,研究并实现了java web的 mysql数据库的备份、下载、恢复功能,中间遇到一些问题,耗费了不少时间,下面让我一一道来:

 

背景介绍:

  • window 7系统
  • mysql 5.7
  • eclipse
  • spring mvc
  • tomcat 7
  • jdk 1.7

先上代码:

     使用mysql的mysqldump 命令进行备份。 

/**
	 * Java代码实现MySQL数据库备份
	 * 
	 * @author lgc
	 * @param hostIP
	 *            MySQL数据库所在服务器地址IP
	 * @param userName
	 *            进入数据库所需要的用户名
	 * @param password
	 *            进入数据库所需要的密码
	 * @param savePath
	 *            数据库导出文件保存路径
	 * @param fileName
	 *            数据库导出文件文件名
	 * @param databaseName
	 *            要导出的数据库名
	 * @return 返回true表示导出成功,否则返回false。
	 */
	public static boolean exportDatabaseTool(String hostIP, String userName, String password, String savePath,
			String fileName, String databaseName) throws InterruptedException {
		boolean fa = false;
		File saveFile = new File(savePath);
		if (!saveFile.exists()) {// 如果目录不存在
			saveFile.mkdirs();// 创建文件夹
		}
		if (!savePath.endsWith(File.separator)) {
			savePath = savePath + File.separator;
		}

		PrintWriter printWriter = null;
		try {
			printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
			String backup = "mysqldump -h" + hostIP + " -u" + userName + " -p" + password + " " + databaseName
					+ " --set-charset=UTF8 ";
			String path = "E:\\";//这里是你复制的mysqldump.exe所在的文件目录下
			String commad = "cmd /c " + path + backup + ">" + savePath + fileName;
			System.out.println(commad);
			Runtime.getRuntime().exec(commad);
			fa = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (printWriter != null) {
				printWriter.close();
			}
		}
		return fa;
	}

 

恢复备份:

// 数据库恢复
	public static void load(String filename) {

		 try {
			 String path = "E:\\";
				String commad = "cmd /c " + path+"mysql -u root -pcisoft jeecms "; 
	            Runtime rt = Runtime.getRuntime();
	            // 调用 mysql 的 cmd:
	            Process child = rt.exec(commad);
	            OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流
	            String inStr;
	            StringBuffer sb = new StringBuffer("");
	            String outStr;
	            BufferedReader br = new BufferedReader(new InputStreamReader(
	                    new FileInputStream(filename), "utf8"));
	            while ((inStr = br.readLine()) != null) {
	                sb.append(inStr + "\r\n");
	            }
	            outStr = sb.toString();

	            OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
	            writer.write(outStr);
	            // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
	            writer.flush();
	            // 别忘记关闭输入输出流
	            out.close();
	            br.close();
	            writer.close();

	            System.out.println("/* Load OK! */");

	        } catch (Exception e) {
	            e.printStackTrace();
	        }

	}

 

 

坑一:

  • mysql 安装在c盘默认路径下,Program Files 文件夹名称之间有空格,导致程序明明运行一切正常,就是无法导出数据,文件大小始终为0kb。
       解决办法:
       1.把mysql 安装目录下-》bin文件夹-》mysqldump.exe ,复制到项目或者任意文件夹,然后程序强制应用 复制后的mysqldump.exe 执行即可
       2.同理mysql安装目录下的mysql.exe,也复制到项目或任意文件夹,然后程序使用时,使用复制的文件的所在路径下即可

       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuguichenglove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值