在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 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><%Recover com = new Recover();String url = "D:/jxc.sql";boolean check = com.load();if(check){ %> 数据库恢复成功 <%} %> </body></html>
?