J'ai une nouvelle exigence pour purger les fichiers de vidage MySQL datant de plus de 30 jours. Les fichiers utilisent une convention de dénomination "all-mysql-YYYYMMDD-HHMM.dump". Les fichiers sont situés sur un système de fichiers monté sur SAN, donc la restauration n'est pas un problème, mais l'espace disque est malheureusement limité et se remplit rapidement, ce qui nécessite une intervention humaine fréquente.
Exemple de noms de fichiers
- all-mysql-20130324-2330.dump
- all-mysql-20130325-2330.dump
- all-mysql-20130326-2330.dump
Ma première pensée a été d'utiliser "find" dans un script batch avec -mtime +30, cependant, les temps de modification ne peuvent pas être garantis et certaines des anciennes archives pourraient échapper à la date de purge :)
J'ai créé le script BASH suivant, mais j'espérais qu'il y avait un moyen plus propre d'effectuer cette opération.
#!/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
une solution plus propre?