一、项目要求
客户需要一个可以将数据进行备份的功能,每次想要备份时,点一下就可以进行备份。
二、项目环境
项目的部署环境是Linux
注:windows也是一样,改一下文件的后缀和批处理文件的内容即可。
看过好些个博文,没有一个是符合我的要求的。于是我就动手写了一个
侵权即删!!
参考二:Java调用Shell命令和脚本 - 百度文库https://wenku.baidu.com/view/6efdf5002c60ddccda38376baf1ffc4ffe47e281.html
以上内容只作为参考,如有侵权请联系,本人立即删除。
三、解决方案
1.创建一个批处理文件,xxx.sh。写入下方脚本
rem ******MySQL backup start******
@echo off
::设置时间变量
if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%%hour%%time:~3,2%"
::进入mysql安装目录的bin目录下
:: cd "C:\Program Files\MySQL\MySQL Server 5.7\bin\"
::cd F:\backup\
::执行备份操作
::mysqldump --opt --single-transaction=TRUE --user=root --password=root --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "db_pj_oa" > F:\backup\backup_%Ymd%.sql
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump" -uroot -proot db_pj_oa > F:\backup\db_pj_oa_%Ymd%.sql
@echo on
rem ******MySQL backup end******
2.创建一个批处理类,拷贝下方方法
public String callScript(String script, String args, String... workspace) {
String line = "";
if(workspace[0] != null) {
System.out.println(workspace[0]);
try {
ProcessBuilder processBuilder = new ProcessBuilder();
Process process = processBuilder.command(workspace[0] + "/" + script).start();
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = input.readLine()) != null) {
line = "true";
}
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return line;
}
script:是批处理文件的名称,如,bkdp_pj_oa.sh(我的)
args:这里我默认为“4”,想要知道为什么是“4”的朋友可以自行查阅资料
workspace:批处理文件的文件夹名称,如,/home/backup/(我的)
3.调用批处理文件
// 调用数据库备份批处理文件
DataBackups dbup = new DataBackups();
dbup.callScript("bkdp_pj_oa.sh", "4", "/home/backup/");
DataBackups:是我的批处理文件的类
如此,大功就告成了!
欢迎评论进行探讨!