由备份不能正常执行所想到的

简介:
问题:
某台机器的备份脚本不能定期执行 , 具体表现为备份脚本运行一段时间之后 , 备份目录 /home/dbbackup 被删除 , 导致备份无法正常完成
 
基本情况:
机器无被入侵迹象

备份脚本共有两个 :A-bck.sh  B-bck.sh 分别对项目 A B 的数据进行备份 , 分别在 0 点和 1 点执行
 
其中 A-bck.sh 是我之前所写 , 已经执行了很长时间没有问题
B-bck.sh 是同事最近所写 , 在执行了一段时间之后出现这样的问题
 
脚本说明:
1.
脚本 A-bck.sh 的内容是将 A 项目的备份都放在 /home/dbbackup/
定期删除 7 天之前的文件 , 删除命令写的是 find /home/dbbackup/ -mtime +7 |xargs rm -r
 
2.
后来同事为 B 项目写备份脚本 B-bck.sh, 内容参照我的原脚本
为了区分项目 , 他将 A B 两个项目的备份分开放在 /home/dbbackup/A/ /home/dbbackup/B/ , 并按此修改了我的备份脚本 A-bck.sh 中的备份路径
但是脚本里面的定期删除命令并没改 , 仍然是 find /home/dbbackup/ -mtime +7 |xargs rm -r
 
问题原因分析:
每次脚本运行 , 备份文件都是产生在 "/home/dbbackup/ 项目目录/ "
系统里面标识有改动的就是 " 文件 " "/home/dbbackup/ 项目目录 "( 通过 ll 命令查看改动日期这两个的修改时间会变化 ), 系统认为 "/home/dbbackup " 目录并没有改动 (ll 命令显示此目录的改动日期不变 )
所以当同事将项目分了目录的 7 天过后 , 脚本运行 find /home/dbbackup/ -mtime +7  出来的结果含有 "/home/dbbackup/", 所以此目录就被删除语句给直接删掉了
 
解决办法:
将删除语句改为
find /home/dbbackup/A/*.* -mtime +7 |xargs rm –r
find /home/dbbackup/B/*.* -mtime +7 |xargs rm -r
即将 find 细化到项目文件下 , 这样就保证搜索出来的都是特定目录下的文件了
 
原理:
一个多级目录  /A/B/C/ , 如果 C 下产生 , 修改 , 新建 , 删除文件或者目录  , 那么修改时间 (1l 命令显示的时间 ) 会变化的是 C,
上级目录 A B 的修改时间并不会改变
举例 假设 10 天前 , 建好目录结构 /A/B/C/, 并设置好备份任务 , C 目录下每天产生备份文件 , 名称为 1,2,3 依次累加 , 到今天产生到文件 10
那么使用 find /A/B/  -mtime +7  查找修改时间在 7 天之前的文件 , 结果为
/A/B/( 其修改时间是10 天前, 也在查找的范围内)
1,2,3( 这是7 天前产生的文件)
注意 C 不在 , 因为每天产生一个备份文件 ,C 的修改时间随之更新
 
要达到只删除文件的目的 , 就需要具体到目录 find /A/B/C/ -mtime +7  或者更加明确到文件 find /A/B/C/* -mtime +7
 
教训:
每次修改脚本的时候 , 必须测试 .
这次就是因为同事在修改我脚本的时候 , 并没有测试我的脚本 .( 因为我的脚本一直运行正常 , 他只是修改了一个目录而已 , 大意的认为没有问题 )


本文转自yahoon 51CTO博客,原文链接:http://blog.51cto.com/yahoon/200603,如需转载请自行联系原作者
 
相关文章
|
6月前
|
SQL Java 数据库连接
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
|
6月前
|
SQL 存储 关系型数据库
原本可以执行得很快的 SQL 语句,执行速度却比预期的慢很多,原因是什么?如何解决?
原本可以执行得很快的 SQL 语句,执行速度却比预期的慢很多,原因是什么?如何解决?
|
4月前
|
存储 关系型数据库 MySQL
(十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
相信大家在编写SQL时一定有一个困扰,就是明明记得数据库中有个命令/函数,可以实现自己需要的功能,但偏偏不记得哪个命令该怎么写了,这时只能靠盲目的去百度,以此来寻找自己需要的命令。
163 28
|
SQL 关系型数据库 数据库
记一次程序 Bug 导致数据删除的恢复过程
使用RDS、DMS进行数据恢复实践
1000 0
|
SQL 安全 关系型数据库
需要binlog的场景下,“暴力”干掉历史binlog文件,尽情释放磁盘空间
需要binlog的场景下,“暴力”干掉历史binlog文件,尽情释放磁盘空间
106 0
|
存储 关系型数据库 MySQL
你的数据库真的清除干净了嘛?看完这篇文章你会若有所思!!
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合 有时候MySQL不能完全卸载,这时候必须通过一些途径删除掉注册表和一些残余的文件,然后才能重新安装才可以成功!
你的数据库真的清除干净了嘛?看完这篇文章你会若有所思!!
|
SQL 数据库连接 数据库
游戏版本要回滚,还好我机智备份了数据库,代码直接拿走
今天有空整了下之前写的数据库备份的代码。
280 0
游戏版本要回滚,还好我机智备份了数据库,代码直接拿走
|
SQL 关系型数据库 MySQL
mysql 的 sql执行顺序口诀,麻麻再也不用担心忘记啦!!
mysql 的 sql执行顺序口诀,麻麻再也不用担心忘记啦!!
253 0
mysql 的 sql执行顺序口诀,麻麻再也不用担心忘记啦!!
|
SQL 关系型数据库 MySQL
闯祸了,生产环境执行了DDL操作《死磕MySQL系列 十四》(2)
闯祸了,生产环境执行了DDL操作《死磕MySQL系列 十四》
181 0
闯祸了,生产环境执行了DDL操作《死磕MySQL系列 十四》(2)
|
SQL 安全 关系型数据库
闯祸了,生产环境执行了DDL操作《死磕MySQL系列 十四》(1)
闯祸了,生产环境执行了DDL操作《死磕MySQL系列 十四》
207 0
闯祸了,生产环境执行了DDL操作《死磕MySQL系列 十四》(1)