Tôi có một yêu cầu mới để lọc các tệp kết xuất MySQL cũ hơn 30 ngày. Các tệp sử dụng quy ước đặt tên của "all-mysql-YYYYMMDD-HHMM.dump". Các tệp được đặt trên hệ thống tệp được gắn SAN, vì vậy việc khôi phục không phải là vấn đề, nhưng không gian ổ đĩa bị hạn chế một cách đáng tiếc và lấp đầy nhanh chóng nên cần có sự can thiệp thường xuyên của con người.
Ví dụ về tên tệp
- tất cả-mysql-20130324-2330.dump
- tất cả-mysql-20130325-2330.dump
- tất cả-mysql-20130326-2330.dump
Suy nghĩ đầu tiên của tôi là sử dụng "find" bên trong một tập lệnh bó với -mtime +30, tuy nhiên, thời gian sửa đổi không thể được đảm bảo và một số tài liệu lưu trữ cũ có thể trốn tránh ngày thanh trừng :)
Tôi đã tạo tập lệnh BASH sau đây, nhưng tôi hy vọng có một cách sạch hơn để thực hiện thao tác này.
#!/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
logrotate
một giải pháp sạch hơn?