首页 > 代码库 > 备份文件自动对比、删除脚本
备份文件自动对比、删除脚本
最近公司在进行数据备份计划,所以我编写了“scp自动复制脚本”与“rsync+inotify实现服务器之间文件实时同步”的2个备份文档,2个方案都成功的被使用,领导与同事都认为能解决备份问题,接下来在进行备份的时候,也没用发现问题,证明我弄的备份文档还可以,领导还说我弄的不错 。 但在接下来备份的中途,发现服务端(也就是要做备份的服务器)的磁盘空间满了,在这台服务器的一些服务写不了输入到服务器里(这个是通过nagios监控磁盘空间得到的报警邮件,但我明明设置为磁盘空间超过80%warning报警,超过90%进行crtical报警,但磁盘空间都满了才收到报警,不知道哪里设置错了,还在查找),所以我们打算清理一些文件,获得一些空间。 当我登陆服务器就发现没有什么可以删除的文件,但服务器磁盘空间都满了超过5分钟了,领导们都很着急,最后没办法只能在正在进行备份任务的服务端,删除一些已经备份到备份服务器的文件,这个是最后的办法了,但那个备份的目录里有8509个文件夹,每个文件夹里有3000-7000左右的txt文件,我当时进行的是scp自动复制,如果想删除哪些文件的话,还得去备份端查看哪些文件已经在备份端接收了,然后在去服务端删除,这样的话,太浪费时间了,而且工作量太大,每个文件大约能有3-5m,刚开始我清理了20个,获得了83m,这样服务端的应用服务可以写入数据到服务器了,但生成的文件速度太快了(以前磁盘空间大的时候也没用注意 ),比我删除的速度都快,这样的话,过一会磁盘就又满了。 没办法,我就打算用脚本来解决此问题,在经过30分钟左右时间,总算写成了一个脚本,在测试机里测试了几遍没用问题发现,就在生产的服务器里运行了这个脚本,发现删除速度很快,没用误删除文件,总算解决了这个问题。 下面是我为这个“备份文件自动对比、删除脚本”写的运维人员使用手册,一个技术文档。
备份文件自动对比、删除脚本
一、目的
由于引擎服务器里应用服务每五秒生成一个文件夹,每个文件夹有3000-7000左右的txt文档,所以造成引擎服务器的磁盘空间饱满,不能正常的工作,为了解决这种情况,我编写了“ssh信任与scp自动备份脚本”与“rsync+inotify实时同步服务器文件”这2种解决方法,但发现备份任务可以完成,并符合公司平台的要求,但在做备份的时候,很可能引擎服务器的磁盘空间就满了,没有办法正常工作,或者在备份完成的时候,由于文件数目很多,没有办法知道哪些是备份完成的,哪些是没有备份的,及时做wc -l对比也不行,所以根据这种情况,我又编写了一份“备份文件自动对比、删除脚本”,用自动化的方式来实现备份文件的自动对比、删除,解决了磁盘空间满的问题,为我们运维的工作节省了很多的时间,去解决其他的问题。
二、实现机制
是通过脚本的方式实现自动化,在服务端与备份端都运行此脚本,产生日志,并把备份端的日志传到服务端,并在服务端的要备份目录里,运行rm脚本,实现了备份文件自动对比、删除。
三、脚本内容解释A.服务端server
#!/bin/bash server="$(ls -l /usr/local/lbs/file/area|awk ‘{print $9}‘)" ###此为查看要备份的目录,并把他的文件名复制到server_log日志里 echo $server > /tmp/server_log
B.备份端back
#!/bin/bash back="$(ls -l /home/beifen/area|awk ‘{print $9}‘)" ###此为查看做备份的目录,并把它的文件名负责到back_log日志里 echo $back> /tmp/back_log
如何查询当前服务器使用哪种字体,可以使用cat /etc/sysconfig/i18n命令,查询结果为LANG="en_US.UTF-8",则是英文字体;查询结果为LANG="zh_CN.UTF-8",则为中文字体。
C.服务端的rm
#!/bin/bash a="$(cat /tmp/server_log)" ##定义a为查看服务端日志里文件名 b="$(cat /tmp/back_log)" ##定义b为查看备份端日志里文件名 for a in $b; ##如果服务端的文件名与备份端的文件名一直,那么在服务端删除备份端里的文件名,这样在服务端就没有了这个文件,节省了磁盘空间,而在备份端还存在这个文件,起到了备份的计划任务。 do rm -rf $b done
四、部署脚本1、在备份端
把back上传到备份端,给764权限然后运行sh back,就能在/tmp里看到一个back_log日志文件产生,并把此文件上传到被备份端的/tmp目录下;2、服务端A.把server上传到此服务器上,给764权限然后运行sh server,就能在/tmp里看到一个server_log日志文件产生;B.把rm上传到此服务器,具体路径为/usr/local/lbs/file/area,给764权限;C.运行sh rm,等待一会就能自动的删除area里的文件(只是在存储里删除贵州备用机器里已有的文件)五、备注 此脚本只适用与备份端的(/home/beifen/area)与被备份端的(/usr/local/lbs/file/area)之间的文件传输与自动删除area里的文件,其他情况不适用。 如果你想进行备份其他目录里的文件的话,需要修改服务端server里的内容与备份端back里的内容,并且把rm上传到服务端中要做备份里的目录下。
#!/bin/bash server="$(ls -l /tmp/test|awk ‘{print $9}‘)" ###此为查看要备份的目录,并把他的文件名复制到server_log日志里 echo $server > /tmp/server_log
#!/bin/bash back="$(ls -l /tmp/test|awk ‘{print $9}‘)" ###此为查看做备份的目录,并把它的文件名负责到back_log日志里 echo $back> /tmp/back_log
[root@nagios tmp]# scp back_log 172.16.6.2:/tmp back_log 100% 10 0.0KB/s 00:00
#!/bin/bash a="$(cat /tmp/server_log)" ##定义a为查看服务端日志里文件名 b="$(cat /tmp/back_log)" ##定义b为查看备份端日志里文件名 for a in $b; ##如果服务端的文件名与备份端的文件名一直,那么在服务端删除备份端里的文件名,这样在服务端就没有了这个文件,节省了磁盘空间,而在备份端还存在这个文件,起到了备份的计划任务。 do rm -rf $b done
备份文件自动对比、删除脚本