package com.sunt.test.backupdb;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
import com.sunt.test.logutil.Log;
public class BackUpMysql {
// 声明要执行备份数据库的命令
private static StringBuilder cmd = null;
// 私有化构造方法
private BackUpMysql() {
}
/**
* 开始执行备份startBackUp方法(周期执行)
*
* @param username
* 用户名
* @param password
* 密码
* @param dbname
* 数据库名
* @param path
* 备份的路径
* @param time
* 多久执行一备份
*/
public static void startBackUp(String username, String password,
String dbname, String path, long time) {
// 防御式编程
if (username == null || password == null || dbname == null
|| path == null) {
System.exit(0);
}
// 开起一个计时器按调用者传入的周期进行备份操作
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// 调用备份逻辑
extracted(username, password, dbname, path);
}
}, 0, time);
}
/**
*
* @param username
* @param password
* @param dbname
* @param path
* @param IOException
*/
private static void extracted(String username, String password,
String dbname, String path) {
// 设置文件名,根据时间来写
String fileName = new SimpleDateFormat("yyyyMMddHHmmss")
.format(Calendar.getInstance().getTime()) + dbname;
// 实例化cmd对象
cmd = new StringBuilder();
// 一下操作是做cmd命令的拼写
cmd.append("cmd.exe /C mysqldump -u");
cmd.append(username);
cmd.append(" -p");
cmd.append(password);
cmd.append(" ");
cmd.append(dbname);
cmd.append(" > ");
cmd.append(path);
cmd.append("/" + fileName + ".sql");
// 获取一个Runtime对象
Runtime r = Runtime.getRuntime();
try {
// 执行cmd备份操作
r.exec(cmd.toString());
} catch (IOException e) {
// 出错了,记日志文件到e盘的backupmysql.log文件
Log.printErr(e, "e:/backupmysql.log");
System.exit(0);
}
}
}