`
moonsee
  • 浏览: 134427 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 备份数据库

阅读更多
首先我们要先写一个备份类
BackupDb.java
代码如下:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BackupDb {
public BackupDb() {
}
public String backup() throws IOException {

  BufferedWriter mBufWriter = null;
//建立一个BackupDb.bat文件
  FileWriter fileWriter = new FileWriter("BackupDb.bat");
  mBufWriter = new BufferedWriter(fileWriter);
 
  /*
   * 把数据库备份方法写入BackupDb.bat文件中。
   * BackupDbUrl 是数据库备份命令。
   * pg_dump.exe -U postgres -E utf8 test 备份数据库命令。
   * —U postgres 数据库用户名  -E utf8 设定字符编码格式。test 数据库名
   * BackupDbName 备份文件所存目录和名称,我是以备份时间命名。
   */
  String BackupDbUrl = "d:\\PostgreSQL8\\bin\\pg_dump.exe -U postgres -E utf8 test >";
  //取系统时间
  Date NowTimes = new Date();
  //将时间格式化成yyMMddhhmmss(年月日时分秒),例如200805010043   2008年5月1日0点43分。
  SimpleDateFormat sdf = new SimpleDateFormat("yyMMddhhmmss");
  String BackupDbName = "d:\\" + sdf.format(NowTimes) + ".sql";
  mBufWriter.write(BackupDbUrl);
  mBufWriter.write(BackupDbName);
  mBufWriter.newLine();
  mBufWriter.flush();
  mBufWriter.close();
  try {
   Runtime.getRuntime().exec("BackupDb.bat"); //执行BackupDb.bat文件进行备份数据库
  } catch (Exception e) {
   e.printStackTrace();
  }
  return BackupDbName;
}
}

然后我们在创建一个timer类,用来定时备份时间
TimerUse.java

代码如下:

package yifeng.com.org;
import java.text.SimpleDateFormat;
import java.util.*;
import java.io.*;
public class TimerUse {
public static void main(String[] args) {
  PickTask picktask = new PickTask();
  picktask .start(1, 60); //每60秒执行一次
}
}
class PickTask {
private Timer timer;
public PickTask() {
  timer = new Timer();
}
private TimerTask task = new TimerTask() {
  public void run() {
   Date date = new Date();
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   String beginDate = sdf.format(date);
   String beginTime = beginDate.substring(11, 16);
   System.out.println(beginDate);
  
   BackupDb bdb=new BackupDb();
   PrintLog pl=new PrintLog();
   //设定备份时间
   if (beginTime.equals("23:22")) {
    try {
    
     bdb.backup(); //执行文件备份
     String dbName=bdb.backup().toString(); //取出备份的文件名字
     String path="d:\\";
     int nameNo=dbName.lastIndexOf("\\");
     File file=new File(path,dbName.substring(nameNo+1, dbName.length()));
     System.out.println(dbName.substring(nameNo+1, dbName.length()));
     //查看文件是否存在,以判断是否备份成功,写到备份日志里
     //注: 此处有点问题,明明备份成功,但是日志里却是位备份成功。不知道原因出在哪里
     //  在debug的时候写到日志里的就是备份文件成功。
     //  哪位高手能帮忙解决一下,在下不胜感激。
     //提示:其实这里还应该做些处理,如果未备份成功就应该重新备份。
     if(file.exists())
      pl.WriteLog(dbName+" 备份文件成功");
     else
      pl.WriteLog(dbName+" 未备份成功");
    
    } catch (FileNotFoundException e) {
     System.out.println("can not find the file");
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
};
public void start(int delay, int internal) {
  timer.schedule(task, delay * 1000, internal * 1000);
}
}

最后我们在写一个简单的备份日志类:
PrintLog.java

代码如下:
package yifeng.com.org;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PrintLog {
public PrintLog(){
 
}
public void WriteLog(String log) throws IOException{
  BufferedWriter mbw = null;
//在D盘创建一个备份日志文件log。txt
  FileWriter fileWriter = new FileWriter("D:\\log.txt",true);
  mbw = new BufferedWriter(fileWriter);
 
  Date date=new Date();
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  String writeTime=sdf.format(date);
  mbw.write(writeTime+"   "); //写入时间
  mbw.write(log);       //写入日志内容
  mbw.newLine();
  mbw.flush();
  mbw.close();
}
}

http://serverbbs.ccw.com.cn/viewthread.php?tid=10754
分享到:
评论
4 楼 ydk123645 2012-02-06  
skyblue 写道
我测试了一下你的代码,备分后,*.sql文件为空,不知道是什么原因哦.

 
   求解释啊!!! 我的是mysql   为什么是空的啊!!!
3 楼 csdn_zuoqiang 2010-09-09  
如果固定住文件名,可以备份;如果按照LZ原文中动态命名,则文件为空。

不知道啥原因的~!?
2 楼 floydeye 2009-07-23  
我的也是空的呢。
1 楼 skyblue 2009-03-16  
我测试了一下你的代码,备分后,*.sql文件为空,不知道是什么原因哦.

相关推荐

Global site tag (gtag.js) - Google Analytics