2015-12-19 42 views
1

我正在編寫一個shell腳本來每天自動執行sql元數據備份。我陷入了兩者之間。我的做法是每天備份sql元數據,並刪除舊備份以保持最後3個備份的安全。請使用該命令幫助我刪除以前的備份,保留最後3次備份。用於遞歸sqlmetadata備份的shell腳本

FILE= mysql_metadata_backup_$(date '+%Y-%m-%d_%H-%M-%S').sql 
mysqldump -u userID --all-databases > ${FILE} 
+0

你可以使用'LS -t'了點。 – sjsam

+0

什麼? – Naveen

+0

它對輸出進行排序,最新的文件列在第一位。查看我的答案。我已經在腳本里面解釋了一些事情。 – sjsam

回答

0

我想你可以使用bash參數擴展來實現你的目標。

將下面的bash腳本放在包含備份的文件夾中。

#!/bin/bash 
file_list=($(ls -t mysql_metadata_backup*)) 
# The '-t' parameter of the 'ls' sorts the output according to modification time with newest displayed first. 
rm $(echo ${file_list[@]:3}) 
# The ':3' does the magic slicing the array from the index 3 
# All the files except the newest three are passed to the "rm" command. 

運行它會刪除除最新三個之外的所有備份。

也許你可以考慮增加一個cron作業來自動化這個。

參考:

Bash Parameter Expansion

+0

我將文件放在同一個文件夾中並運行腳本。它給錯誤。 ls:無法訪問mysql_metadata_backup_Sat:沒有這樣的文件或目錄 – Naveen

+0

'FILE = mysql_metadata_backup _ $(date'+%Y-%m-%d_%H-%M-%S').sql'不正確,我猜。你可以做'temp = $(date'+%Y-%m-%d_%H-%M-%S')&& FILE = mysql_backup_ $ temp.sql' – sjsam

+0

真棒Sjsam,它與你最後的答案一起工作。非常感謝 – Naveen