Skip to content

Instantly share code, notes, and snippets.

@kovalbogdan95
Created November 12, 2018 16:49
Show Gist options
  • Save kovalbogdan95/36415b5e2b3b6f0fa6dc6ff42808446c to your computer and use it in GitHub Desktop.
Save kovalbogdan95/36415b5e2b3b6f0fa6dc6ff42808446c to your computer and use it in GitHub Desktop.
Database backup rotation
#!/bin/bash
# Получение доступа к базе данных
DB_DATABASE=table
DB_USERNAME=user
DB_PASSWORD=password
# Переменная для сохранения строки с датой
BACKUP_DATE=`date +%Y-%m-%d__%H:%M:%S`
# Префикс, или, говоря иначе, начало имени файла
BACKUP_PREFIX="db"
# Количество копий, которое нужно сохранять
MAX_COPIES_COUNTER=7
# Директория, в которой будут храниться бэкапы
DIRECTORY_FOR_BACKUPS="./database_backups"
# Собственно архивация
echo 'Backuping database'
mysqldump -u $DB_USERNAME -p$DB_PASSWORD $DB_DATABASE | gzip > $DIRECTORY_FOR_BACKUPS/$(echo $BACKUP_PREFIX)__$BACKUP_DATE.sql
echo "Created $(ls $DIRECTORY_FOR_BACKUPS | sort -r | head -n 1)"
# Подсчитываем количество копий, которое сохранено в папке для хранения резервных копий
COPIES_COUNTER=`ls $DIRECTORY_FOR_BACKUPS | grep $BACKUP_PREFIX | wc -l`
# Если файлов сохранено больше, чем нам необходимо
if [ $COPIES_COUNTER -gt $MAX_COPIES_COUNTER ]
then
# Вычисляем, сколько файлов нужно удалить из папки
NEED_TO_DELETE_COUNTER=$(($(ls $DIRECTORY_FOR_BACKUPS | wc -l)-$MAX_COPIES_COUNTER))
# Организуем цикл, количество циклов равно количеству файлов, которое нужно удалить
for (( i==1; i<$NEED_TO_DELETE_COUNTER; i++ ))
do
# Сортируем список файлов, берем из него первый и удаляем
# Файлы будут отсортированы по возрастанию, соответственно
# удалится самый ранний файл
echo "Deleting $(ls $DIRECTORY_FOR_BACKUPS | sort | head -n 1)"
rm $DIRECTORY_FOR_BACKUPS/$(ls $DIRECTORY_FOR_BACKUPS | sort | head -n 1)
done
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment