手动备份mysql数据库

/**

*paths  文件路径 

*user    数据库用户名

*pass   数据库密码

*database 数据库名

*/

public static boolean backup(String paths,String user,String pass,String database) {//备份  
     try {  
         System.out.println(paths);
         Runtime rt = Runtime.getRuntime();
         String mysql="mysqldump -u "+user+" ";
         if(pass=="")
          mysql +=""+database+""; 
         else
          mysql += "-p "+pass+" "+database+"";  
         // 调用 mysql 的 cmd: 
         System.out.println(mysql);
         Process child = rt .exec("cmd /c "+mysql);// 设置导出编码为utf8。这里必须是utf8   
         // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行  
         InputStream in = child.getInputStream();// 控制台的输出信息作为输入流  
         System.out.println(in.read()+"22-----------------------");
         InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码  
         System.out.println(xx.read()+"==========");
         String inStr;  
         StringBuffer sb = new StringBuffer("");  
         String outStr;  
         // 组合控制台输出信息字符串  
         BufferedReader br = new BufferedReader(xx); 
         System.out.println(br.readLine().toString()+"--=-==-=-=-=-=-=");
         while ((inStr = br.readLine()) != null) {  
             sb.append(inStr + "\r\n");
             System.out.println(inStr+br.readLine().toString()+"}}}}}}}}}}}}}}");
         }  
         outStr = sb.toString();   
         // 要用来做导入用的sql目标文件:  
         FileOutputStream fout = new FileOutputStream( paths);  
         OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");  
         writer.write(outStr);  
         System.out.println(outStr.toString()+"(((((((");
         // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免  
         writer.flush();  
  
         // 别忘记关闭输入输出流  
         in.close();  
         xx.close();  
         br.close();  
         writer.close();  
         fout.close();                     
         String error="备份成功!";      
         StrError = (new String(error.getBytes("ISO-8859-1"),"UTF-8"));    
         return true;
     } catch (Exception e) {  
         e.printStackTrace();  
         StrError=StrError+"failure!<br/>";
         return false;
     }  
 }

 

 

 

 

 

 

 

 

 

 

/**

*paths  文件路径

*user   用户名

*pass  密码

*database 数据库名称
*/

 public static boolean load(String paths,String user,String pass,String database) {//还原  
   
     try {  
         //String fPath = "c:/db.sql";  
         Runtime rt = Runtime.getRuntime();  
         // 调用 mysql 的 cmd:
         String sqlStr="mysql ";
         if(pass=="")
         sqlStr+="-u "+user+" "+database+" ";
         else
         sqlStr+="-u "+user+" -p "+pass+" "+database+" "; 
         Process child = rt.exec(sqlStr);  
         OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流  
         String inStr;  
         StringBuffer sb = new StringBuffer("");  
         String outStr;  
         BufferedReader br = new BufferedReader(new InputStreamReader(  
                 new FileInputStream(paths), "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! */");  
         StrError=StrError+"备份成功!<br/>".getBytes("gb2312");  
     } catch (Exception e) {
         e.printStackTrace(); 
         StrError=StrError+"failure!<br/>";
         return false;
     }  
     return true;  
 }

 

 

 

下面是调用备份方法的的类

/**
  * 添加数据
  */
 public String addCopyDatabase() {
  String path=ServletActionContext.getRequest().getRealPath("/backdata");
  Date date=new Date();
  SimpleDateFormat sdf=new SimpleDateFormat("yyMMddHHmmss");
  SimpleDateFormat sdfs=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
  String paths=path+"\\"+sdf.format(date)+".sql";
  //System.out.println(paths);
  try {
   if(BackUp.backup(paths, user, pass, database))
   {
       }else
   {
  return SUCCESS;
 }

 

 

 

/**
  * 还原数据库文件
  * @return
  */
 public String revertCopyDatabase()
 {
  try {
   HttpServletResponse response = ServletActionContext.getResponse();   
   PrintWriter out = response.getWriter();
   copyDatabase = copyDatabaseService.findCopyDatabase(this.id);
   String paths=copyDatabase.getCopyPath();
   BackUp.load(paths, user, pass, database);
   if(BackUp.load(paths, user, pass, database))
    result=3;
   else
    result=4;
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return SUCCESS;
 }

 

 

自己调用后面两个方法就行了

切记这里是备份的本机数据库、

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值