一、需求说明
由于工作需要,备份禅道数据文件,将局域网内192.168.30.20机器上的文件备份到192.168.30.22机器上,需要备份的文件如下图所示,需要备份*.sql.php、* .file等文件,不备份*.code目录
二、备份文件
查找资料后选择使用robocopy创建Windows批处理任务,并使用Windows的定时任务每日执行任务进行备份。robocopy是windows7以后自带的文件复制工具,可以在终端输入robocopy /? 查看不同参数的定义。
备份脚本放在192.168.30.20机器上,文件备份代码如下:
- copy_backup.bat
rem 实现远程拷贝的批处理代码
rem 开始copy
@echo off
set filename=zentao_backup.log
echo -------------------Backup Zentao Log Files------------------------- >>%filename%
echo Start >>%filename%
echo (%date% %time%) >>%filename%
echo Backup Zentao log files in E:\xampp\zentao, Please wait... >>%filename%
SETLOCAL ENABLEDELAYEDEXPANSION
set srcdir=E:\xampp\zentao\tmp\backup\
set dstdir="\\192.168.30.123\e$\zentao\backup"
rem 使用共享文件夹
net use "\\192.168.30.123\e$\zentao\backup" "123456" /user:Administrator
robocopy %srcdir% %dstdir% *.* /E /XD *.code
pause
echo End >>%filename%
echo (%date% %time%) >>%filename%
rem 结束copy
代码参考https://jingyan.baidu.com/article/d5a880ebcb3ed113f147cc01.html,并根据实际需求更改了部分代码,代码解释参考下图:
三、创建定时任务
参考文章:windows环境添加定时任务
1.在Windows Server2012中,我们进入服务器管理面板,点击右上角菜单栏中的“工具”,选择其中的“任务计划程序”:
2.打开了任务计划程序之后,我们点击右侧的“创建基本任务”:
3.然后,我们需要填写任务的名称,以及描述信息:
4.点击下一步之后,我们需要设定任务的执行频率,我选择的是“每天”:
5.再次点击“下一步”,设置任务执行的时间,我选择了夜深人静的2点:
6.继续“下一步”后,我们选择“启动程序”:
7.在之后的对话框中,我们需要选择编写的脚本文件:
8.完成这些步骤后,windows会给我们看一下整个任务的概述信息:
9.确定无误之后,点击“完成”就可以了。此时我们就会看到在Windows的任务列表里,多了一条新的任务:
至此,在Windows环境下定时执行脚本的设置就全部完成了。
四、删除过期备份文件
如果备份数据较大时,需要考虑定期清除过期的备份数据。本次实例中需求是每天删除过期2周的数据。删除备份的脚本放在192.168.30.22机器上,具体代码如下:
- delete_old.bat
@echo off
rem write to log
set filename=deletefile.log
echo -------------------Delete Expired Log Files------------------------- >>%filename%
echo Start >>%filename%
echo (%date% %time%) >>%filename%
echo Delete the expired log files in E:\zentao, Please wait... >>%filename%
forfiles.exe /p "E:\zentao\backup" /m *.* /d -14 /c "cmd /c if @ISDIR==TRUE rd /s/q @path"
forfiles.exe /p "E:\zentao\backup" /m *.sql.php /d -14 /c "cmd /c del @path"
echo End >>%filename%
echo (%date% %time%) >>%filename%
完成批处理代码后,再参考标题三的步骤创建定时任务,设置每天运行该任务。
删除过期数据的代码参考文章:
bat使用forfiles自动批量删除过期文件
forfiles删除文件夹