Home  >  Article  >  Java  >  Java backup and restore Mysql database

Java backup and restore Mysql database

大家讲道理
大家讲道理Original
2016-11-10 10:55:421162browse

///实体类
package com.ews.util;
/**
 * 系统备份展示对象
 * 
 * */
public class DataFile {
 private String fileName;//备份文件的名称
 private String fileDate;//备份文件的日期
 private String filePath;//备份文件的地址
 private String fileSize;//备份文件的大小
 public String getFileSize() {
  return fileSize;
 }
 public void setFileSize(String fileSize) {
  this.fileSize = fileSize;
 }
 public String getFileName() {
  return fileName;
 }
 public void setFileName(String fileName) {
  this.fileName = fileName;
 }
 public String getFileDate() {
  return fileDate;
 }
 public void setFileDate(String fileDate) {
  this.fileDate = fileDate;
 }
 public String getFilePath() {
  return filePath;
 }
 public void setFilePath(String filePath) {
  this.filePath = filePath;
 }
}
  
///实现备份代码
package com.ews.action;
  
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.sql.Date;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
  
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.fileupload.FileItem;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
  
import com.ews.util.DataFile;
  
public class DataAction extends EwsAction{
 private String username;
 private String password;
 private String host;
 private String PORT;
 private String dbname;
 private List dataFiles = new ArrayList();
 private File reductionFile;
 public File getReductionFile() {
  return reductionFile;
 }
 public void setReductionFile(File reductionFile) {
  this.reductionFile = reductionFile;
 }
 public List getDataFiles() {
  return dataFiles;
 }
 public void setDataFiles(List dataFiles) {
  this.dataFiles = dataFiles;
 }
 public String getHost() {
  return host;
 }
 public void setHost(String host) {
  this.host = host;
 }
 public String getPORT() {
  return PORT;
 }
 public void setPORT(String pORT) {
  PORT = pORT;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public String getDbname() {
  return dbname;
 }
 public void setDbname(String dbname) {
  this.dbname = dbname;
 }
 /**
  * 删除
  * */
 public String delete(){
  String fileName = request.getParameter("fileName");
  System.out.println(fileName);
  String backPath = ServletActionContext.getServletContext().getRealPath("/")+"ewssite/back/"+fileName;
  File file = new File(backPath);
  file.delete();
  return "delete";
 }
 /**
  * 得到备份文件的List集合
  * 
  * */
 public String findList(){
  String backPath = ServletActionContext.getServletContext().getRealPath("/")+"ewssite/back/";
  File file = new File(backPath);
  if (!file.exists())
   return "findListData";
  File[] file1 = file.listFiles();
  for (int i = 0; i < file1.length; i++) {
   if(file1[i].getName().equals("ramdit.txt")) continue;
   SimpleDateFormat sdf= new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
   //前面的lSysTime是秒数,先乘1000得到毫秒数,再转为java.util.Date类型
   java.util.Date dt = new Date(file1[i].lastModified());  
   String sDateTime = sdf.format(dt);  //得到精确到秒的表示:08/31/2006 21:08:00
   DataFile dataFile = new DataFile();
   dataFile.setFileName(file1[i].getName());
   dataFile.setFileDate(sDateTime);
   String path = request.getContextPath();
   String filePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/ewssite/back/"+file1[i].getName();
   dataFile.setFilePath(filePath);
   DecimalFormat   df   =   new   DecimalFormat( ".## "); 
   dataFile.setFileSize(df.format(file1[i].length()/1024000f));
   dataFiles.add(dataFile);
  }
  return "findListData";
 }
 /**
  * 配置  Mysql bin目录
  * */
 public void getConfig(){
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  BasicDataSource ba = (BasicDataSource)context.getBean("dataSource");
  setUsername(ba.getUsername());
  setPassword(ba.getPassword());
  String url = ba.getUrl();
  url = url.substring(13, url.length());
  String[] temp = url.split("/");
  String[] temp1 = temp[0].split(":");
  setHost(temp1[0]);
  setPORT(temp1[1]);
  for (int i = 0; i < temp[1].length(); i++) {
   String temp2 = temp[1].charAt(i)+"";
   if(temp2.equals("?")){
    setDbname(temp[1].substring(0,5));
   }
  }
 }
 /**
  * 备份
  * */
 public String backup(){
  getConfig();
  //得到配置文件
  try {
   Runtime rt = Runtime.getRuntime();
   String backPath = ServletActionContext.getServletContext().getRealPath("/")+"ewssite/back/"+System.currentTimeMillis()+".sql";   
   String mysql = "mysqldump -u" + getUsername()+ " -p" + getPassword() + " --default-character-set=utf8 -h"+getHost()+" -P"+getPORT()+" " + getDbname() +" >"+"\""+backPath+"\"";   
   Process proc = rt.exec("cmd.exe /c "+mysql);// 设置导出编码为utf8。这里必须是utf8
   //String backExe = ServletActionContext.getServletContext().getRealPath("/")+"bin/mysqldump.exe"; 
   //String mysql = getDbname()+ " -u" + getUsername()+ " -p" + getPassword() + " --default-character-set=utf8 -h"+getHost()+" -P"+getPORT()+" >"+"\""+backPath+"\""; 
   int tag = proc.waitFor();// 等待进程终止  
  } catch (Exception e) {
   e.printStackTrace();
  }
  return "backup";
 }
 /**
  * 还原
  * */
 public String load(){
  String sqlPath="";
  if(request.getParameter("selectName")!=null)
   sqlPath = request.getParameter("selectName");
  if(reductionFile!=null){
   String name = upload(reductionFile);
   sqlPath = ServletActionContext.getServletContext().getRealPath("/")+"ewssite/back/" + name;
  }
//  System.out.println(sqlPath);
  if(sqlPath.substring(sqlPath.lastIndexOf(".")+1).equals("sql")){
   getConfig();
   setHost("127.0.0.1");
   setUsername("root");
   setPassword("root");
   setDbname("test");
   //得到配置文件
   try {
    Runtime rt = Runtime.getRuntime();
    String createDb = "mysqladmin -u" + getUsername()+ " -p" + getPassword() + " create "+getDbname();
    String mysql = "mysql -u" + getUsername()+ " -p" + getPassword() + " "+getDbname()+" <"+"\""+ sqlPath+"\"";//+"\""+backPath+"\""
    rt.exec("cmd.exe /c "+createDb);
    Process proc  = rt.exec("cmd.exe /c "+mysql);
    int tag = proc.waitFor();// 等待进程终止
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return "load";
 }
 /**
  * 把本地的数据库备份文件上传到服务器上
  * file:从前台获取的file
  * */
 public String upload(File file ){
  String name = "";
  try {
   DataInputStream in = new DataInputStream(new FileInputStream(file));
//   FileInputStream in = new FileInputStream(file);
     
   String backPath = ServletActionContext.getServletContext().getRealPath("/")+"ewssite/back/";
   name = System.currentTimeMillis()+".sql";
   backPath = backPath + name;
//   FileOutputStream out = new FileOutputStream(new File(backPath));
   DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(backPath)));
   int b = -1;
   while ((b = in.read()) != -1) {
    out.write(b);
   }
   out.close();
   in.close();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return name;
 }
}


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn