У меня есть сценарий backup.sh, который создает резервную копию базы данных MySQL, а затем отправляет ее на удаленный сервер. Это отлично работает, и я могу запускать это один раз в день с помощью crontab без проблем.
Однако я хочу хранить резервные копии только за последние 30 дней, иначе через несколько месяцев у меня будут сотни избыточных файлов SQL. Я действительно не знаю, с чего начать. Единственный способ, который я могу придумать, - это иметь 31 подпапку, по одной для каждого дня месяца, а затем заменять каждый файл каждый день. Это немного меньше, чем идеально, и кажется немного грязным.
Ниже приведено содержимое моего файла backup.sh с явно удаленной ключевой информацией:
#!/bin/bash
today=`date +%Y-%m-%d.%H%M%S`
mysqldump -u rails -p******** rails > backups/backup-$today.sql
sshpass -p '********' scp backups/backup-$today.sql m***d@******.co.uk:custom_backups/backup-$today.sql
Можете ли вы использовать ssh на удаленной машине? Если да, вы можете написать сценарий remover.sh
#!/bin/bash
sshpass -p '********' ssh m***d@******.co.uk: "ls -t custom_backups/backup-*.sql | sed -n -e '31,1000 s#^#custom_backups/#p' | xargs rm -f"
Как это устроено?
ls -t custom_backups/backup-*.sql
Список всех файлов, отсортированных по времени - самый старый последний
| sed -n -e '31,1000 s#^#custom_backups/#p'
sed добавить префикс каталога (custom_backups/
) и распечатать (спасибо p
switch) только строки (имена файлов) от 31 до 1000.
| xargs rm -f
xargs удаляет перечисленные файлы. -f
гарантия переключения не будет ошибок, если список пуст, т.е. у вас 30 или менее файлов резервных копий.
Скрипт удаляет самые старые файлы, только если у вас на удаленной машине не менее 30 резервных копий.
Я использую два решения этой проблемы:
Существует множество примеров скриптлетов, которые показывают, как это сделать, просто поиск в Интернете примеров «чередования резервных копий».
Кроме того, у вас, вероятно, есть по крайней мере шаблонный сценарий на той самой машине, на которой вы пытаетесь это сделать: большинство дистрибутивов имеют возможность ротации журналов, вы также можете найти вдохновение в этих сценариях :-)
Поэтому загляните в crontab, чтобы увидеть, упоминается ли там ротация журналов, или проверьте документацию для вашей ОС.