iT邦幫忙

0

mysql備份後排程刪除舊備份檔

公司有寫了shell定時在每晚12點在DB本機產生備份檔
但是之前並未寫到刪除功能
希望能做到產生備份檔同時刪除一個禮拜前備份的檔案,不讓本機空間不足影響DB服務
這要怎麽寫比較好?
do
if [ ! -d "/backup/db/$db" ]; then
mkdir -p /backup/db/$db
fi

    if [ ! -d "/backup/db/$db/$year/$month" ];then
    mkdir -p /backup/db/$db/$year/$month
    fi

done

mysqldump -u $userid -p"$passwd" $db | gzip > $path/$db/$year/$month/$db-$datetime.sql.gz

2 個回答

0
haoming
iT邦好手 1 級 ‧ 2018-03-05 15:56:09
最佳解答

用 find -ctime

find "$apth/" -type d -ctime +4 -print0 | xargs -0 rm -rf --

不過這裡的 ctime 是craete time, 跟我們認知的會有一點點不一樣。
例如 我現在 執行的是時間是 早上3.00, 那他搜尋的會是 4天前的3點之前的檔案
不是我們所認知的 00:00 - 24:00
你可以試試看,如果怕刪錯,就把保留檔案增加一些。

另外這一種 就比較複雜,直接取出00:00 的timestamp, 用timestamp 去比較
裡面用的是我的路徑,你可以試你需要修改

#!/bin/bash

tsbf7=$(date -d "7days ago" +"%s")

find /mnt/backup/local -type d -print0 |sort -k 1| while IFS= read -r -d $'\0' line; do
  date2=$(echo "$line" |grep -Eo '[0-9]{4}-[0-9]{2}-[0-9]{2}')
  ts2=$(date -d "$date2" "+%s")
  if (( "$ts2" < "$tsbf7" )); then
   ## echo "small: $date2"
   find /mnt/backup/local -name "$date2*" -type d -exec rm -rf {} \;
  fi

done

hsiang11 iT邦研究生 5 級 ‧ 2018-03-05 16:27:40 檢舉

哈哈 第二種有點難懂 再研究看看
不過已經找到方式解決了 感謝

froce iT邦研究生 4 級 ‧ 2018-03-05 22:35:04 檢舉

我是直接寫 python,檔名產生時加上日期,然後每天備份時比對順便刪除。
不過我是直接備份到 NAS 上,所以也沒有空間問題。

0
混水摸魚
iT邦新手 4 級 ‧ 2018-03-06 10:56:29

https://www.webteach.tw/?p=784
分享我的寫法,主要是刪除十五天前的資料;跟你的需求一樣我也是備份資料庫時使用,但怕硬碟空間會爆掉所以也是會刪除舊的資料

資料庫備份指令參考:https://www.webteach.tw/?p=581

hsiang11 iT邦研究生 5 級 ‧ 2018-03-07 12:05:55 檢舉

這方法感覺也不錯 感謝

我要發表回答

立即登入回答