Springboot Java启动调用Shell脚本实现MySQL数据库备份
- 编写Java启动脚本方法
- 编写导出MySQL数据的Shell脚本
- 问题总结
编写Java启动脚本方法
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
@RestController
public class ShellController {
@RequestMapping(value = "/executeShell")
public void executeShell(){
try {
//Shell脚本位置
String shpath="/opt/soft/shell/backup_database.sh";
Process ps = Runtime.getRuntime().exec(shpath); //执行脚本命令
SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println("开始执行时间 = " + df1.format(new Date()));
ps.waitFor(); //等待脚本执行完成
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println("结束执行时间 = " + df2.format(new Date()));
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("n");
}
String result = sb.toString();
System.out.println(result);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
编写导出MySQL数据的Shell脚本
#!/bin/bash
#数据库用户名
dbuser='root'
#数据库用密码
dbpasswd='root'
#需要备份的数据库,多个数据库用空格分隔
dbname='spacecenter'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/opt/soft/mysqlbackup/backup_logs'
#数据备份路径
datapath='/opt/soft/mysqlbackup/backup_data'
#备份数据
mysqldump -u ${dbuser} -p${dbpasswd} ${dbname} > "${datapath}/${dbname}"-"${backtime}.sql" 2>> ${logpath}/mysqllog.log;
#若备份成功则进行进行数据压缩
if [ "$?" == 0 ];then
cd $datapath
#将数据压缩节省存储空间
tar czf "${dbname}"-"${table}"-"${backtime}.tar.gz" "${dbname}"-"${backtime}.sql" > /dev/null
#删除原始文件,只留压缩后文件
rm -f "${datapath}/${dbname}"-"${backtime}.sql"
#删除七天前备份,也就是只保存7天内的备份
find $datapath -name "*.tar.gz" -type f -mtime +7 -exec rm -rf {} ; > /dev/null 2>&1
echo ${backtime}-"数据库 ${dbname} 备份成功!!" >> ${logpath}/mysqllog.log
else
#否则,备份失败则进行以下操作
echo ${backtime}-"数据库 ${dbname} 备份失败!!" >> ${logpath}/mysqllog.log
fi
问题总结
#首先创建好如下两个路径,否则运行失败。
#日志备份路径
logpath='/opt/soft/mysqlbackup/backup_logs'
#数据备份路径
datapath='/opt/soft/mysqlbackup/backup_data'