`

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,也复制到项目或任意文件夹,然后程序使用时,使用复制的文件的所在路径下即可

       

 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics