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

?

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

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

其中path为mysql的安装位置:

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

public Map<String, Object> exportDatabase(String address) {
Map<String, Object> resultMap = new HashedMap();
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 = new BufferedReader(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);
return resultMap;
} catch (Exception e) {
e.printStackTrace();
}
resultMap.put("result", "fail");
resultMap.put("data", "地址选择有可能出现问题");
return resultMap;
}

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

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

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

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

<!-- https://mvnrepository.com/artifact/org.apache.ant/ant -->
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.1</version>
</dependency>
public Map<String, Object> importDatabase(String filepath) {
Map<String, Object> resultMap = new HashedMap();
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 = new SQLExec();
//设置数据库参数
sqlExec.setDriver(driverClassName);
sqlExec.setUrl(url);
sqlExec.setUserid(username);
sqlExec.setPassword(password);
//设置字符编码
sqlExec.setEncoding("UTF-8");
//要执行的脚本
sqlExec.setSrc(new File(filepath));
//有出错的语句该如何处理
sqlExec.setOnerror((SQLExec.OnError) (EnumeratedAttribute.getInstance(
SQLExec.OnError.class, "abort")));
sqlExec.setPrint(true); //设置是否输出
//输出到文件 sql.out 中;不设置该属性,默认输出到控制台
sqlExec.setOutput(new File(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");
return resultMap;
}
return resultMap;
}

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

?

原文地址:https://www.cnblogs.com/zhaixingzhu/p/12569251.html

时间: 2024-08-30 14:02:01

Java实现数据库备份并利用ant导入SQL脚本的相关文章

数据库备份结果检查钉钉通知脚本

原文:数据库备份结果检查钉钉通知脚本 故事背景 由于公司数据库服务器非常多,所以如果真的需要去人工巡检备份情况还是很麻烦,于是就想通过脚本来自动检查并且每天通过钉钉机器人通知到用户. 情况1:当备份数据库能够联网 如果备份服务器能够联网,那么就能直接调用钉钉机器人的 API,这也是最简单的发送钉钉通知的方式,脚本如下,按需修改: #!/bin/bash ###################################################################### #

Mysql导入sql脚本到数据库

通过命令导入sql文件到Mysql数据库中 step1:没在windows的环境变量path中mysql安装路径的,把sql文件拷贝到C:\Windows\Temp文件下.这样mysql服务器有权限读取. step2:进入MySQL目录下的bin文件夹:cd MySQL的bin文件夹的路径如我输入的命令行:cd D:\Program Files\MySQL\MySQL Server 5.1\bin(或直接在windows的环境变量path中添加该路径). step3:进入MySQL:mysql

MySQL导入sql脚本中文乱码设置和常用命令

1. use database_name; 2. set names utf8; (或其他需要的编码) 3. source example.sql (sql文件存放路径) Mysql安装目录数据库目录/var/lib/mysql/配置文件/usr/share/mysql(mysql.server命令及配置文件)相关命令/usr/bin(mysqladmin mysqldump等命令)启动脚本/etc/init.d/mysql(启动脚本文件mysql的目录) 系统管理连接MySQL格式: mysq

mysql命令行导入sql脚本中文变问号问题

之前一直用工具连接mysql虽然小问题不断也都无伤大雅,最近做金融云项目,只能通过服务器的内网访问数据库,也就是说只能在linux下通过命令行访问,在导入中文的时候发现都变成问号了,经过查询资料解决,特此记录一下思路. 1.检查sql脚本文件是否unicode编码,打开查看是脚本文件中中文是否能正常显示. 2.检查所建好的数据库是否采用utf8编码. 3.在mysql命令行下执行status检查Server characterset和Client characterset编码是否一致(我就是这一

PowerDesigner导入SQL脚本

打开PowerDesigner,鼠标单击File菜单: 选择:Reverse Enginer,然后在他的子菜单选择Database...; 选择好DBMS(数据库管理系统)类型:然后点击确定按钮:这里演示选中的是mysql数据库,具体类型根据自己需要选择: 点击Add  Files 图标添加脚本: 找到要导入的sql脚本,鼠标单击打开按钮: 鼠标单击,确定按钮: 开始反向工程生成数据库..... 导入成功!

MySQL命令行导入.sql脚本

为MySQL添加环境变量    MySQL安装路径\bin 启动MySQL服务    C:\Users\Administrator>net start mysql 进入MySQL    C:\Users\Administrator>mysql -h localhost -u root -p 创建数据库    mysql> create database mys_tes; 使用数据库    mysql> use mys_tes; 导入MySQL脚本    mysql> sour

mysql导入sql脚本

例如:我的用户名是root 密码是123 sql脚本存在C盘 名字为test.sql 数据库为test 有两种方法可以执行脚本 1:打开CMD输入以下命令(不需要转换目录)>mysql -u root -p123进入MYSQL后mysql>use test;mysql> source c:/test.sql ok执行完了,你可以用show tables;查看有哪写表(记得语句后有个分号)还可以用desc tableName;查看你的表结构 2:打开CMD输入以下命令(进入mysql的bi

Java开发技巧:如何利用Ant手动构建工程

利用Java语言构建工程,在这过程中主要是编译.打包.运行.部署等操作.将工程中的一个src文件夹用来放置工程的源代码,其中只有一个类的源代码. 在HelloWorld中新建HelloWorld.java代码如下: public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } } 在没有使用Ant之前,先采用手工的方式来构建这个HelloWor

Oracle数据库备份 expdp/impdp导出导入命令

使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用. IMP只适用于EXP导出的文件,不适用于EXPDP导出文件:IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件. 一.创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建. 在D 盘新建文件路径d:\test\dump,然后在sql运行