日期:2014-05-17 浏览次数:21361 次
/**
* 数据库备份实现方法
*
*
*/
@Override
public String backupMysql() {
//备份文件存放路径
String sql ="";
//数据库名称 //读取XML得到数据库名称
String databaseName = "";
// 服务URL
String address = "";
// 备份文件存放路径
String sqlpath = "";
//读取XML得到数据库用户名称
String username = "";
//读取XML得到数据库用户密码名称
String password = "";
//备份服务地址
address = "localhost";
//数据库服务路径
String url="";
//获得服务发布的绝对路径
String path = System.getProperty("user.dir");
path = path.substring(0,path.lastIndexOf(“\\"))+"\\webapps\\BIMS\\";
//读取applicationDataSource.xml文件 取出 数据库名,
File f = new File(path+ "/WEB-INF/classes/configs/applicationDataSource.xml");
SAXReader reader = new SAXReader();
Document doc = null;
try {
doc = reader.read(f);
} catch (DocumentException e1) {
log.debug(e1.getMessage());
}
//获得所有node节点集合
Node node = doc.selectSingleNode("//*[@name='url']");
Element e = (Element)node;
url=e.attributeValue("value");
node = doc.selectSingleNode("//*[@name='username']");
e = (Element)node;
username=e.attributeValue("value");
node = doc.selectSingleNode("//*[@name='password']");
e = (Element)node;
password=e.attributeValue("value");
// 得到MYSQL的用户名密码后调用 mysql 的 cmd:
String[] realp=path.split(":");
//备份文件存放路径 目录名自己可以写
sql = realp[0]+":"+"\\MySQlBimsBuckup\\";
String[] urls=url.split("/");
//数据库名称
databaseName = urls[urls.length-1];
//备份文件存放路径
sqlpath = sql;
address = "localhost";
//文件路径
File backupath = new File(sqlpath);
if (!backupath.exists()) {
backupath.mkdir();
}
String time = StringUtil.dateToStr(new Date(), "yyyy-MM-dd");
String filename = time + ".sql";
StringBuffer sb = new StringBuffer();
//拼接命令
sb.append("mysqldump ");
sb.append("--opt ");
sb.append("-h ");
sb.append(address);
sb.append(" ");
sb.append("--user=");
sb.append(username);
sb.append(" ");
sb.append("--password=");
sb.append(password);
sb.append(" ");
sb.append("--lock-all-tables=true ");
sb.append("--result-file=");
sb.append(sqlpath);
sb.append(filename);
sb.append(" ");
sb.append("--default-character-set=utf8 ");
sb.append(databaseName);
Runtime cmd = Runtime.getRuntime();
try {
Process p = cmd.exec("cmd /c " + sb.toString());
InputStreamReader isr = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(isr);
FileOutputStream fos = new FileOutputStream(sqlpath + filename);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw);
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.flush();
}
br.close();
bw.close();
//System.out.println("调用命令:" + sb.toString());
} catch (IOException e1) {
log.debug("",e1);//没做处理
}