需求在生产中 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
#! /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 "==========备份完成==========="
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); } }