使用find刪除備份數據庫的誤區

問題描述

很多公司需要當天定時多次備份數據庫,創建當天日期的目錄及目錄內存放當天備份數據,用網上的腳本出現把整個數據庫備份給刪除了,下面給出了錯誤經過和解決的方法,給同行們參考,注意下操作任何文件請先!!!!備份數據  !!!再測試腳本!!!!


腳本需求

刪除幾天前數據庫備份的目錄及文件。


1.搭建模擬環境

因爲之前的環境已經搞定了,這個模擬下,讓大家瞭解下,不需要的直接看第二部分


[root@foundation0 ~]#mkdir /mysql/{20160401,20160402,20160403.20160404}   #創建模擬數據庫備份夾

[root@foundation0 ~]#touch /mysql/2016040{1,2,3,4}/1111   #創建模擬數據庫備份文件

[root@foundation0 ~]# tree /mysq #查看目錄結構有沒有少文件

/mysql

├── 20160401

│?? └── 1111

├── 20160402

│?? └── 1111

├── 20160403

│?? └── 1111

└── 20160404

    └── 1111

[root@foundation0 ~]# touch -d "04/01/2016" /mysql/20160401   #修改文件目錄時間戳

[root@foundation0 ~]# touch -d "04/02/2016" /mysql/20160402

[root@foundation0 ~]# touch -d "04/03/2016" /mysql/20160403

[root@foundation0 ~]# touch -d "04/01/2016" /mysql/20160401/1111   #修改文件子目錄時間戳

[root@foundation0 ~]# touch -d "04/02/2016" /mysql/20160402/1111   #重要的是"04/02/2016",一開始我寫成"02/04/2016",結果完全不一樣

[root@foundation0 ~]# touch -d "04/03/2016" /mysql/20160403/1111     #最後查找的結果完全不一樣,給自己挖坑


[root@foundation0 ~]# stat /mysql/20160402/1111   #隨便查看修改後的時間戳

  File: ‘/mysql/20160402/1111’

  Size: 0               Blocks: 0          IO Block: 4096   regular empty file

Device: 801h/2049d      Inode: 23566090    Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Context: unconfined_u:object_r:default_t:s0

Access: 2016-04-02 00:00:00.000000000 +0800      #已經變了

Modify: 2016-04-02 00:00:00.000000000 +0800  #已經變了

Change: 2016-04-04 02:09:03.395105983 +0800

 Birth: -


2.開始演示錯誤命令


網絡上查到都是這樣的

[root@foundation0 ~]#find /mysql/ -type d -o -type f  -ctime +1 -exec rm -rf {} \;


#後面執行的語句暫時去掉“-exec rm -rf {} \;”先看看我們搜索到的結果

#因爲我是改的時間戳所以-ctime,我改成-mtime測試,效果一樣

#後果是什麼呢呵呵,全刪,因爲找到了所有目錄,所有連主/mysql都刪掉了

#很多書上和網上都是這樣的命令,坑哭了多少同胞


[root@foundation0 ~]# find /mysql/ -type d -o -type f  -mtime +1  

/mysql/

/mysql/20160401

/mysql/20160401/1111

/mysql/20160402

/mysql/20160402/1111

/mysql/20160404

/mysql/20160403

[root@foundation0 ~]# find /mysql/ -type d -o -type f  -mtime +2

/mysql/

/mysql/20160401

/mysql/20160401/1111

/mysql/20160402

/mysql/20160404

/mysql/20160403


3.正確命令演示

#既然要刪除目錄和文件爲什麼還要加上“-type d -o -type f”呢

#不經過測試的腳本會死的很慘

[root@foundation0 ~]# find /mysql/  -mtime +1

/mysql/20160401

/mysql/20160401/1111

/mysql/20160402

/mysql/20160402/1111

[root@foundation0 ~]# find /mysql/  -mtime +2

/mysql/20160401

/mysql/20160401/1111

#命令完全版測試結果

[root@foundation0 ~]# find /mysql/  -mtime +2 -exec rm -rf {} \;

find: ‘/mysql/20160401’: No such file or directory

[root@foundation0 ~]# find /mysql/  -mtime +2

[root@foundation0 ~]# ls /mysql/2016040*   #查找後確實連目錄都刪掉了,其他沒有文件沒有影響

/mysql/20160402:

1111


/mysql/20160403:

1111


/mysql/20160404:

1111


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章