数据库备份 java jar_Java实现数据库备份并利用ant导入SQL脚本

d2a39c252f60f009d9d3bf945f6580f7.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

数据备份对于经常在运维部署方面的工作者来说,是一件相对简单的事情,都可以通过某一个SQL工具进行备份,但是如果在项目运行当中,我们需要对数据进行实时,或者是每隔一星期,一个月,等等进行数据的备份,这样就需要java工具来操作备份SQL文件,目前可以通过调用mysql安装的命令进行数据备份,另外通过Job任务调度器进行配合使用,这里技术选型为Quartz。

在下面代码当中address为SQL脚本文件存放的地址。

其中path为mysql的安装位置:

D:\mysql\mysql-5.6.35-winx64\bin

public MapexportDatabase(String address) {

Map resultMap = newHashedMap();try{

String path= PropertiesFileUtil.getInstance("sql").get("path");

String root= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");

String dataBase= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.dataBase");

String table= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.table");

String password= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");

String sqlName= System.currentTimeMillis() + ".sql";

Runtime rt=Runtime.getRuntime();

Process child= rt.exec(path + "mysqldump -u" + root + " -p" + password + " -R -c --set-charset=utf8 " + dataBase + " " + table + "");

InputStream in=child.getInputStream();

InputStreamReader xx= new InputStreamReader(in, "utf8");

String inStr;

StringBuffer sb= new StringBuffer("");

String outStr;

BufferedReader br= newBufferedReader(xx);while ((inStr = br.readLine()) != null) {

sb.append(inStr+ "\r\n");

}

outStr=sb.toString();

FileOutputStream fout= new FileOutputStream(address + "/" +sqlName);

OutputStreamWriter writer= new OutputStreamWriter(fout, "utf8");

writer.write(outStr);

writer.flush();

in.close();

xx.close();

br.close();

writer.close();

fout.close();

resultMap.put("result", "success");

resultMap.put("data", address + "/" +sqlName);returnresultMap;

}catch(Exception e) {

e.printStackTrace();

}

resultMap.put("result", "fail");

resultMap.put("data", "地址选择有可能出现问题");returnresultMap;

}

上述代码当中主要的是用到了Runtime,Runtime封装了运行环境,每一个java运行实例都有一个Runtime类为实例,使程序能够与其环境相接。

一般不能实例化一个Runtime对象,应用程序不能创建自己的Runtime实例,但是可以通过getRuntime的方法获取当前Runtime运行时对象的引用。

一旦得到当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制java虚拟机的状态和行为。

执行SQL脚本,我们可以通过ant来实现,首先我们引入ant的jar包

org.apache.ant

ant

1.7.1

public MapimportDatabase(String filepath) {

Map resultMap = newHashedMap();try{

String username= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");

String password= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");

String url= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.url");

String driverClassName=PropertiesFileUtil.getInstance("sql").get("sql.jdbc.driver");

String filepathName= filepath.substring(0, filepath.lastIndexOf("."));

String outputPath= filepathName + ".out";

SQLExec sqlExec= newSQLExec();//设置数据库参数

sqlExec.setDriver(driverClassName);

sqlExec.setUrl(url);

sqlExec.setUserid(username);

sqlExec.setPassword(password);//设置字符编码

sqlExec.setEncoding("UTF-8");//要执行的脚本

sqlExec.setSrc(newFile(filepath));//有出错的语句该如何处理

sqlExec.setOnerror((SQLExec.OnError) (EnumeratedAttribute.getInstance(

SQLExec.OnError.class, "abort")));

sqlExec.setPrint(true); //设置是否输出//输出到文件 sql.out 中;不设置该属性,默认输出到控制台

sqlExec.setOutput(newFile(outputPath));

sqlExec.setProject(new Project()); //要指定这个属性,不然会出错

sqlExec.execute();

logger.info("执行sql脚本文件成功");

resultMap.put("result", "success");

}catch(Exception e) {

logger.info("执行sql脚本文件失败");

e.printStackTrace();

resultMap.put("result", "fail");returnresultMap;

}returnresultMap;

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

欢迎关注微信公众号:摘星族,我们在等待您的加入。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值