Springboot Java启动调用Shell脚本实现MySQL数据库备份

Springboot Java启动调用Shell脚本实现MySQL数据库备份

编写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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值