日期:2014-05-16  浏览次数:20439 次

在JSP页面调用JAVA方法实现MySQL数据库的备份和恢复

今天弄了好久,终于搞定了这个问题。使用java代码实现数据库的备份。

package cn.qm.db;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;


public class Command {
	/*
	public static void main(String[] args) throws IOException {
		Command com = new Command();
		com.backupDatebase("localhost","root","root", "JXC", "D:/jxc.sql");
	}
	
	/**
	 * 执行dos命令
	 * @param cmd
	 * @return
	 */
	public String execCmd(String cmd) {
		StringBuffer sb = new StringBuffer("");
		StringBuffer str = new StringBuffer();
		str.append("cmd.exe /c \"").append(cmd).append("\"");
		System.out.println(str);		//打印执行的命令
		Process ls_proc;
		try {
			ls_proc = Runtime.getRuntime().exec(str.toString());
			BufferedReader in = new BufferedReader(
									new InputStreamReader(
										new DataInputStream(ls_proc.getInputStream())));
			String ss = "";
			while((ss = in.readLine()) != null) {
				sb.append(ss).append("\n");
			}
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		} 

		return sb.toString();
	}
	
	/**
	 * 执行mysql数据库备份
	 * @param ip
	 * @param username
	 * @param password
	 * @param datebaseName
	 * @param filePath
	 * @return
	 */
	public boolean backupDatebase(String ip, String username, String password,String datebaseName, String filePath) {
		String strCommand = "mysqldump -h "+ip+" -u" + username + " -p" + password + " " + datebaseName + " > " + filePath;
		String result = execCmd(strCommand);
		System.out.println(result);
		return true;
	}
	
	/**
	 * 根据返回结果验证是否成功
	 * @param result
	 * @return
	 */
	public boolean check(String result) {
		return true;
	}
}

?在JSP页面只要调用这个JAVA类就可以。(文件名只能是.sql)

<%@ page language="java" import="java.util.*,cn.qm.db.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>数据库备份测试</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
<%
Command com = new Command();
String ip = "localhost";//ip地址
String username = "root";//MySQL数据库的用户名
String password = "root";//MySQL数据库的密码
String database = "JXC";//数据库名字
String url = "D:/jxc.sql";//备份的目的地址
boolean check = com.backupDatebase(ip,username,password,database,url);
if(check){
 %>
 数据库备份成功
 <%} %>
  </body>
</html>

?下面是恢复数据的代码。

package cn.qm.db;
import java.io.*; 
import java.lang.*; 

/* 
* 还原MySql数据库 
* */ 
public class Recover { 
public boolean load(){
	String filepath = "d:\\jxc.sql"; // 备份的路径地址  
	  //新建数据库test 

	  String stmt1 = "mysqladmin -u root -proot create jxctest"; 

	  String stmt2 = "mysql -u root -proot jxctest < " + filepath; 
	  String[] cmd = { "cmd", "/c", stmt2 }; 

	  try { 
	  Runtime.getRuntime().exec(stmt1); 
	  Runtime.getRuntime().exec(cmd); 
	  System.out.println("数据已从 " + filepath + " 导入到数据库中"); 
	  } catch (IOException e) { 
	  e.printStackTrace(); 
	  } 
	  return true;
}
} 

?

<%@ page language="java" import="java.util.*,cn.qm.db.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transiti