MySQL数据定时备份

需求在生产中 MySQL备份并返回路径

  1. MySQL执行备份单个数据库命令是:
    参考:https://www.cnblogs.com/kissdodog/p/4174421.html
    mysqldump -u用户名 -p密码 --databases 数据库名 > 路径/文件名.sql
  2. 使用 shell脚本触发并执行MySQL备份命令
    参考:https://blog.csdn.net/yuanchangliang/article/details/109312804
  3. Java调用 shell脚本,并返回路径
    参考:https://blog.csdn.net/qq_41893274/article/details/116573250

测试 shell脚本

  • mysql_backups.sh
#! /bin/bash
#完成数据库的定时备份
#备份的路径
BACKUP=/opt/white_duck/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo ${DATETIME}
echo "==========开始备份==========="
echo "备份的路径是<$BACKUP/$DATETIME/$DATETIME.sql>"
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=white_duck1
#创建备份的路径
#如果备份的路径文件夹存在就使用,否则创建
[ ! -d "$BACKUP/$DATETIME"  ]  && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD}  --databases $DATABASE  > $BACKUP/$DATETIME/$DATETIME.sql

#删除30天前的备份文件(-exec rm -rf {} \是固定写法,删除查询出来的数据)
find $BACKUP -mtime +30 -name  "*.sql" -exec rm -rf {} \;
echo "==========备份完成==========="

测试java代码

public class Demo {
    public static String callScript(String script, String args, String... workspace) {
        String cmd = "sh " + script + " " + args;
        File dir = null;
        Process process = null;
        BufferedReader br = null;
        //获取保存后的路径
        String sqlPath = "";
        try {
            if (workspace[0] != null) {
                dir = new File(workspace[0]);
            }
            String[] evnp = {"val=2", "call=Bash Shell"};
            //在指定环境和工作目录的独立进程中执行指定的命令和变量。
            process = Runtime.getRuntime().exec(cmd, evnp, dir);
            //输出shell脚本输出的内容
            br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = "";
            while ((line = br.readLine()) != null) {
                System.out.println(line);
                //截取获取路径
                if (line.contains("<")) {
                    sqlPath = line.substring(line.indexOf("<") + 1, line.lastIndexOf(">"));
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (process != null) {
                process.destroy();
            }
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return sqlPath;
    }

    public static void main(String[] args) {
        String sqlPath = callScript("mysql_backups.sh", "4", "/opt/");
        System.out.println("path =" + sqlPath);
    }
}
  • 编译成 .class文件放到Linux下测试
    image
posted @ 2022-09-06 17:19  MikiKawai  阅读(717)  评论(0编辑  收藏  举报