MySQL数据定时备份
需求在生产中 MySQL备份并返回路径
- MySQL执行备份单个数据库命令是:
参考:https://www.cnblogs.com/kissdodog/p/4174421.html
mysqldump -u用户名 -p密码 --databases 数据库名 > 路径/文件名.sql
- 使用 shell脚本触发并执行MySQL备份命令
参考:https://blog.csdn.net/yuanchangliang/article/details/109312804- 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下测试