windows环境下定时任务备份数据库:
https://www.cnblogs.com/craffming/p/12097089.html
以上有在线文档支持,不做过多的描述;
Linux环境下定时任务备份数据库:
1、首先在Linux环境某路径下新建一个专门存放sh指令文件的路径,如:
/usr/local/backup
2、因为Linux环境如同window环境一样,都自带了定时任务指令,不同的是Linux环境下的指令是 crontab
3、我们使用crontab -e 对定时任务进行编写:如下图:

设置好对应的定时刷新的间隔时间
4、使用crontab -l 来查询定时任务:如图所示:

Liunx环境下数据库备份方法:
1、在/usr/local 下新建backup文件夹
2、编写sh脚本如下:
#!/bin/bash
find /usr/local/backup -name "backuppig_*" -type f -mmin +3 -exec rm -rf {} \;
#删除3分钟之前生产的通配backuppig_*的sql脚本,-mmin +3 表示3分钟之前, -mtime +3则是表示三天之前的
mysqldump -u root -pgskj2024 nyj-livepig-pro > /usr/local/backup/backuppigsql_$(date +%Y%m%d_%H%M%s).sql
3、当在Linux里执行mysqldump时找不到时:
执行 ln -s /usr/local/tool/mysql/bin/mysqldump /usr/bin 软链接将mysqldump设置为全局
注:/usr/local/tool/mysql/bin 为MySQL的安装路径
4、Liunx服务器设置定时任务:
crontab -e ----> 0 11/22 * * * /usr/local/backup/xxx.sh eg:每天11点、22点做数据库备份
Liunx服务器查看定时任务:
crontab -l
注意:sh脚本权限问题: /usr/local/backup 下面的sh脚本的权限要加读写权限 chmod 777 xxx.sh
5、然后我们编写sh执行脚本
#!/bin/bash
find /usr/local/backup -name "backuppigprosql_*" -type f -mtime +2 -exec rm -rf {} \;
mysqldump -u root -pgskj2024 nyj-livepig-pro > /usr/local/backup/backuppigprosql_$(date +%Y%m%d_%H%M%s).sql
对sh语言进行解析:
我们一般是使用mysqldump 来操作数据库备份的。所以先要确保Linux环境上mysqldump可以正常执行。
其次,因为备份数据库sql,如果不加删除机制,硬盘的内存会日益扩张,这肯定是不行的,所以我们在sh脚本前增加删除sql脚本的命令。
find /usr/local/backup -name "backuppigprosql_*" -type f -mtime +2 -exec rm -rf {} ;
这个命令的意思将所有带backuppigprosql_ 前缀的sql,凡是超过了3天的在/usr/local/backup/路径下的全部删除。只保留最近三天的数据库备份;
mysqldump -u root -pgskj2024 nyj-livepig-pro > /usr/local/backup/backuppigprosql_$(date +%Y%m%d_%H%M%s).sql
这个sh脚本意思就是将对应数据库的DB,全部转化为以backuppigprosql_开头的sql脚本。
这样sh脚本也就配置好了。注意在/usr/local/backup/backuppigpro.sh 一定需要和定时任务里的
0 11,22 * * * /usr/local/backup/backuppigpro.sh
一模一样。这样,我们到了定时任务刷新的时间点后,可以看到备份的sql
如图所示:

我们将其下载下来并打开,如图:

如图,这样我们在Linux环境下定时任务备份数据库就完成了。
另外,扩展一下,对于使用其他的定时任务,也可以采用代码去运行定时任务:
第一步,新建一个定时任务 rxxTask.mySqlDump() 触发执行mySqlDump方法:
public void mySqlDump(String host, String port, String username, String password, String databasename,String backupNumStr) throws Exception {
String dir = GSConfig.getUploadPath() + "/dbBackUp";
if (!FileUtil.exist(dir)) {
FileUtil.mkdir(dir);
}
String sqlName = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN)+ ".sql";
String sqlPathName = dir + File.separator + sqlName;
if (FileUtil.exist(sqlPathName)) {
System.out.println(sqlName + "文件名已存在,请更换");
return;
}
//拼接cmd命令 windows下 cmd Linux下 /bin/sh
Process exec;
OsInfo osInfo = SystemUtil.getOsInfo();
//如果不能取得系统属性os.name(因为Java安全限制),则总是返回false
if(osInfo.isWindows()){
exec = Runtime.getRuntime().exec("cmd /c mysqldump -h" + host + " -P" + port + " -u " + username + " -p" + password + " " + databasename + " > " + sqlPathName);
} else {
exec = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "/usr/bin/mysqldump -h" + host + " -P" + port + " -u " + username + " -p" + password + " " + databasename + " > " + sqlPathName});
}
if (exec.waitFor() == 0) {
System.out.println("数据库备份成功,备份路径为:" + sqlPathName);
}
//压缩
String zipPathName = dir + File.separator + sqlName + ".zip";
ZipUtil.zip(sqlPathName, zipPathName);
//删除
FileUtil.del(sqlPathName);
//获取外部的备份保留份数
int backupNum = 5;
try {
backupNum = NumberUtil.parseInt(backupNumStr);
} catch (Exception e){
System.out.println("backupNumStr非数字:"+backupNumStr);
}
//删除之前备份份数
List<String> fileNames = FileUtil.listFileNames(dir);
if(CollUtil.isNotEmpty(fileNames)){
//从大到小排序
fileNames = fileNames.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
for (int i = 0; i < fileNames.size(); i++) {
//超过的份数全删除
if(i>=backupNum){
FileUtil.del(dir + File.separator + fileNames.get(i));
}
}
}
}