windows自动备份批处理
在运维工作中,让人郁闷让人烦燥的不是LINUX下的配置和操作(因为在linux下往往有N种方法实现同一功能)。恰恰相关,而是平时给我们提供最多便利的图形化的windows。而备份应该算是运维工作的基本功之一吧!而windows下有点类似于linux的shell的应该就是批处理了(现在有人poweshell替代了弱弱的cmd,不过还是和linux shell差了十万八千里)。批处理实起来是蛮不爽的,不过一句一句分开来去写也不是那么麻烦。下面我们利用bat来逐步实现批处理的备份。
一、给备份文件加上年月日时标志
众所周知(对于运维来说啊!^v^),linux下有个date命令。其实windows下面也有一个date命令,其作用和linux下的一样。可以设置时间,也可以查看年月日。不过对于时和分,cmd下用到了另一个命令time 。实现年月日也很简单:
1echo %date:~0,4% //year
2echo %date:~5,2% //month
3echo %date:~8,2% //day
在cmd下,试试上面的语句。显示的就是年月日,是不是很简单?同样取星期、时、分、秒,甚至毫秒同样简单,如下:
1echo 取星期:%date:~10,6%
2echo 取小时:%time:~0,2%
3echo 取分:%time:~3,2%
4echo 取秒:%time:~6,2%
5echo 毫秒:%time:~9,2%
同样也不难吧!不过这里还有点小问题,我们取出的小时,如果是0~9点之间时,前面的零是剩略的。为了美观一致,想要小时是0的时候在其前面加上零同样也不难。只需要加个if判断就OK了:
1if "%time:~0,1%"==" " (set backup_file=%db_name%-%date:~0,4%%date:~5,2%%date:~8,2%-0%time:~1,1%) else (set backup_file=%db_name%-%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%)
二、文件压缩
平时我们备份的对像主要是数据库、web站点内容居多。像数据库文件和html页面文件多以文本类内容居多,这些文件的压缩率是很高的。如果磁盘空间不足的情况下。对备份出来的文件进行压缩,完成后再把原备份出来的文件删除掉是个不错的选择。而我们在windows下装的最多的压缩文件应该是winrar,当然我们也可以选择开源的7zip 。我们这里以winrar为例吧。
默认安装在C:\Program Files\WinRAR下,其可以通过rar.exe进行命令行操作,直接敲rar.exe出例出来:
1C:\Documents and Settings\Administrator>"C:Program Files\WinRAR\rar.exe"
2用法: rar - -
3 a 添加文件到压缩文件
4 c 添加压缩文件注释
以上我只是列出了首部分,由于参数很多,后面我就省略了。列举几个常见用法:
1、默认压缩
1rar a help *.hlp 或
2rar a help.rar *.hlp
2、目录中是否包含子目录
1rar a Pictures.rar 361way* (不包含子目录)
2rar ar Pictures.rar 361way* (包含子目录)
3、列出详细的压缩文件列表,并输出到文件
1rar vt system.rar >list.txt
4、只单纯列文件名输出到文件
1rar vb system.rar >list.txt
5、使用当前的日期和时间生成压缩文件名
1D:>"C:Program FilesWinRARrar.exe" a -ag centos
2正在创建 压缩文件 centos20121225152129.rar
3正在添加 1.bat 完成
4正在添加 10.7.dmg 1%
默认为YYYYMMDDHHMMSS格式,另外还有其他几种形式为
1rar a -agDD-MMM-YY backup
2rar a -ag+YYYYMMDDHHMM backup
3rar a -agYYYY{year}-WW{week}-A{wday} backup
4rar a -agYYYYMMDD-NN backup
注:上面的N代表递增数字,允许一天之内生成前面相同,后在的NN是递增的数个文件。
6、为压缩文件加密
1rar.exe a -hptest nginx.rar nginx-1.2.2 密码test
由于rar的用法比较多,在此不一一列举。具体可以查看该命令的帮助提示。
三、备份文件的轮循删除
在备份过程中,一般都是将备份文件保持在一个周期内。这个周期可能是一周、半个月也可能是一个月。而通过批处理实现循环删除的方法我总结了三种,如下
1、move循环删除
1move /Y 3.sql 4.sql
2move /Y 2.sql 3.sql
3move /Y 1.sql 2.sql
循环覆盖,备份出的文件为1.sql 。该文件适用于循环周期比较短的情况下。
2、for循环删除
1for /f "skip=30" %i in ('dir *.bak /tc /o-d /b') do del %i
利用for和dir的时间排序,保留最近30个.bak备份文件。
3、forfiles命令法
windows 2003系统下有一个非常实用的命令forfiles.exe(windows 2000和windows xp下可以直接把该文件复制过来使用),其有一个非常好用的参数/D,即按时间列出最近的文件或文件和目录。
1forfiles.exe /D -30 /c "cmd /c del /Q @file"
以上语句会把30天以上的文件全部del掉。如果想把文件和目录都列出来,只需要把@file换成@path即可,但是目录是不能通过del命令删除的。其需要 rd命令才能删除。上面的用法可以换成:
1FORFILES /c "cmd /c if @ISDIR==TRUE RD /s/q @PATH" 只针对目录
2FORFILES /c "cmd /c if @ISDIR==TRUE del /Q @file" 只针对文件
forfiles提供了另外的有用的参数是@isdir,用于判断是否是目录。至于forfiles的其他用法,可以通过在windows 2003下,输入forfiles.exe /?查看。
四、将备份文件保存到其他机器上
上面的三部,我们基本上完成了备份所需要的大致流程。不过往往也有很多企业会将所有的备份集中进行管理。这个时候我们还需要将备份的文件传到其他服务器上。当然实现的方法很多。思路主要也是两种,一种是推;一种是拉。即:一种是将目前的服务器做为服务端,备份服务器过来取;另外一种是备份服务器是服务端。由本服务器上传。这里我们以后者为例吧!
方法一:ftp上传法
首先在服务器一上建立backup.ftp文件(这里假设保存至C:backup.ftp),文件内容如下:
1open 192.168.1.10 //Your Ftp Server 你要备份到的服务器的ip
2user backup //Your Ftp username
3*************//Your Ftp password
4lcd d:backup
5bin
6prompt
7mput *.*
8bye
9quit
10exit
再建立uptobak.bat的批处理文件,文件内容如下:
1ftp -n -s:"c:backup.ftp"
上面三部的备份过程完成后,调用该bat文件即可。
方法二:rsync实现法
rsync实现法,在此不多说。以前有篇日志介绍过。
注:实现的方法远远不止以上两种,只不这两种最为常见而已。其他方法同此类似,可以类举调用。
五、备份提示
最后这一步,可能无关轻重,但又似乎十分关轻重。因为日常工作中对很多程序执行情况的了解,都会通过检查是否收到相关告知提示,或告知文件中是否有异常来判断。本例提到的工具是sendEmail,这个也是linux上的一衍生品。前提是只要服务器可以正常上网即可。该工具本来只是linux上一个.pl邮件工具。不过现在被高人改成了.exe的windows版本。
该工具用法比较简单,但功能十分强大。用法不再介绍,其项目主页为:http://caspian.dotconf.net/menu/Software/SendEmail/ ,如是接收邮件方为139邮箱,可以做到短信提示的做用。
后记:此五步法,基本上完成了windows下所有备份操作的总体思路,另外,由于批处理中可能会涉及到用户密码之类的敏感信息。最好可以利用批处理加密工具对批处理文件进行下加密操作。这样的工具也非常多,在此不再介绍。下文会以此文提到方法为例,将第一、二、三、五步的操作为例,做一个window下oracle的备份。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/bat-autobak/2129.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.