Saya memiliki persyaratan baru untuk membersihkan file dump MySQL yang lebih lama dari 30 hari. File-file menggunakan konvensi penamaan "all-mysql-YYYYMMDD-HHMM.dump". File-file tersebut terletak pada sistem file yang dipasang di SAN, jadi pemulihan tidak menjadi masalah, tetapi sayangnya ruang drive terbatas dan terisi dengan cepat sehingga membutuhkan intervensi manusia yang sering.
Contoh nama file
- all-mysql-20130324-2330.dump
- all-mysql-20130325-2330.dump
- all-mysql-20130326-2330.dump
Pikiran pertama saya adalah menggunakan "find" di dalam skrip batch dengan -mtime +30, namun, waktu modifikasi tidak dapat dijamin dan beberapa arsip lama dapat menghindari tanggal pembersihan :)
Saya membuat skrip BASH berikut, tetapi saya berharap ada cara yang lebih bersih untuk melakukan operasi ini.
#!/bin/bash
STARTING_DIR=$(pwd)
FILE_PREFIX=all-mysql-
BACKUP_DIR=/opt/backup/mysql/dumps
ARCHIVE_WINDOW_DAYS=30
cd $BACKUP_DIR
# Create YYYYMMDD datestamp for Today - $ARCHIVE_WINDOW_DAYS
ARCHIVE_WINDOW_IN_SECS=$(echo "$(date +%s) - (${ARCHIVE_WINDOW_DAYS} * 86400)" | bc)
PURGE_BEFORE_DATE=$(date -d @${ARCHIVE_WINDOW_IN_SECS} +%Y%m%d)
for backup_file in $FILE_PREFIX*
do
# Trim prefix, time portion of date stamp, and file extension
# from $backup_file to allow numeric comparison against YYYYMMDD
backup_trim_tmp=${backup_file#${FILE_PREFIX}}
backup_trimmed=${backup_trim_tmp%-****.dump}
if [ ${PURGE_BEFORE_DATE} -gt ${backup_trimmed} ]
then
rm $backup_file
fi
done
cd $STARTING_DIR
logrotatesolusi yang lebih bersih?