| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
mxd2
9年前发布

Java备份还原Mysql数据库

///实体类  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;   }  }