问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中 sql数据库备份代码怎么写

发布网友 发布时间:2022-04-11 06:20

我来回答

2个回答

懂视网 时间:2022-04-11 10:41

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

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

其中path为mysql的安装位置:

D:mysqlmysql-5.6.35-winx64in

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 + "
");
}
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;
}

 

技术图片

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

技术图片技术图片?

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

标签:src   工作   默认   控制台   buffered   inpu   epo   改变   bsp   

热心网友 时间:2022-04-11 07:49

最简单的SQL语句:备份与还原SQL Server自带的数据库

在服务器上备份:
use Northwind
Backup database Northwind to disk='d:\Northwind_bak.dat' with init

RESTORE DATABASE NorthNwind FROM DISK = 'd:\Northwind_bak.dat'

备份数据库这一操作在客户机上实现
客户机:machine
共享目录:share (要完全共享,可写权限)

backup:
bakcup database dbname to disk='\\machine\share\data.bak' with init
\\machine\share目录要有写权限。

restore:
restore database dbname from disk='\\machine\share\data.bak'

//
备注:restore 语句有很多的选项,可以查看企业管理器的在线帮助。如下
with replace, move 'dbname_dat' to 'c:\mssql7\data\dbname.mdf',
move 'dbname_log' to 'c:\mssql7\data\dbname.log'
其中'c:\mssql7\data\'是服务器的目录,这点要注意

备份与还原数据库的相关内容:
SQL Server 7.0数据库备份有四种:完全数据库备份、增量数据库备份、事务日志备份、数据库文件或文件组备份。在数据库崩溃时,应该首先尝试备份事务日志(这一点很重要),然后恢复最后的数据库备份、该次数据库备份后的所有增量备份,最后恢复事务日志备份,这样可以将数据库恢复到崩溃前的状态。

备份是定期的,而不是实时的,所以利用备份并不能完全恢复数据库,它只能将数据库恢复到制作备份的那一刻 ...... 数据库日志是实时的,他忠实的记录下所有对数据库的更新操作。因此,当磁盘出现故障造成数据库损坏时,就可以首先利用备份恢复数据库(大部分数据),然后运行数据库日志,即将备份后所做的操作重新在做一遍,从而将数据库完全恢复。

--备份完整的数据库---------------------------------------------------------------
//创建一个备份设备:
1. Create the backup device for the full MyNwind backup.///
USE master
EXEC sp_admpdevice 'disk', 'MyNwind_2', 'c:\mssql7\backup\MyNwind_2.dat'

2. Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_2

--备份数据库的日志---------------------------------------------------------------
--1. Create the log backup device.

USE master
EXEC sp_admpdevice 'disk', 'MyNwindLog1', 'c:\mssql7\backup\MyNwindLog1.dat'

--2. Update activity has occurred before this point. Back up the log of the MyNwind database.

BACKUP LOG MyNwind TO MyNwindLog1

try
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('backup database pubs');
AdoQuery1.SQL.Add('to disk='+''''+edtPath.Text+'''');
AdoQuery1.ExecSQL;
except
ShowMessage('备份数据库失败!');
exit;
end;

SQL server的备份
=========================================================================
=========================================================================
备份:

with adocommand_restore do//用ADocommand控件
begin
CommandText:='use Master';//
Execute;
CommandText:='execute sp_helpdevice';//系统存储过程
Execute ;
CommandText:='backup database '+'db_name'+' to disk='''+FileName+''' with init';//这行应当是这样
Execute ;
CommandText:='Use '+'db_name';//这行应当是这样
Execute ;
application.MessageBox('已经成功备份数据库','数据库备份',MB_OK + MB_ICONINFORMATION);
end;
恢复:
with adocommand1 do//用AdoCommand控件
begin
CommandText:='use Master';
Execute;
CommandText:='execute sp_helpdevice';
Execute ;
CommandText:='Restore database '+'db_name'+' From disk='''+'c:\data1.bak'+''' with replace';//这行应当是这样
Execute ;
CommandText:='Use '+'db_name';//这行应当是这样
Execute ;
application.MessageBox('已经成功恢复数据库','数据库恢复',MB_OK + MB_ICONINFORMATION);
end;

*注:db_name指数据库的名称
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
门?049期父母欲其改娶五字金口决,开是什么特号生肖 支付宝怎么把银行卡的钱转到余额里呢? 下载wampserver5,安装并启动后不能启用apache、mysql的功能,请问这是怎... wampserver安装多个版本phpmysqlapache 四季豆有哪些吃法值得推荐? 四季豆牛肉馅饼的家常做法是什么? 香煎四季豆豆腐饼怎么做好吃 腾讯会议没声音怎么修复-腾讯会议没有声音修复办法 西安市高新区所有幼儿园 西安高新第二初级中学学区有哪些小区 omays欧美时手表有官网吗?质量怎么样呀? 微信来信息为什么没有提示音了 微信新消息没有提示音 伯恩光学和深超光电什么区别 深圳精镀光学科技有限公司怎么样? 杭州波长光电科技有限公司怎么样? 哪种光学胶带效果好?主要用在电子产品上 东莞塘厦立国光学电子厂怎么样? 山东北方光学电子有限公司怎么样? 需要观看电子产品光学显微镜适合多少倍数的? 上海健善光学电子有限公司怎么样? 什么是光学拾音头?光学拾音头的工作原理是什么? 光电子产品公司推荐有哪些? 苹果6s plus一直停留在苹果图标不能开机 苹果6s plus白苹果开不了机怎么办 孕妇怀孕初期老感觉恶心是怎么回事 孕妇恶心反胃想吐怎么回事 生日礼物可以做什么手工 4s店车险续保的好处 孕妇呕吐头晕是怎么回事 素烧鹅怎么做好吃,素烧鹅的家常做法 素鹅(斋烧鹅)怎么做 素烧鹅的做法窍门 楼外楼素烧鹅的做法 家常甜品素烧鹅怎么做 朋友过来广州玩,想请喝早茶,去哪比较好? 求白云山可以饮早茶的地方 烧素鹅的做法,烧素鹅怎么做好吃,烧素鹅的家常做法 白云山附近哪里有早茶喝,具体在哪里 广州白云区哪里可以喝早茶? 素烧鹅的做法 白云山桃花涧有没有喝早茶的地方 广州白云区哪里喝早茶好 素烧鹅的卤汁怎么调制 请问广州白云山的游玩路线拜托了各位 谢谢 广州白云区黄石东路周边哪里有喝早茶的地方,谢谢! 请各位推荐广州市内吃早茶的好地方 佛门素鹅的做法,佛门素鹅怎么做好吃 广外附近哪里有早茶喝? 广州喝早茶最好的地方在哪里?