Archive-rotate » История » Версия 3
Андрей Волков, 2013-03-22 15:11
| 1 | 1 | Андрей Волков | h1. Ротация архивов по расписанию |
|---|---|---|---|
| 2 | |||
| 3 | 3 | Андрей Волков | h2. Идея |
| 4 | |||
| 5 | Идея в том, чтобы удалять архивы старше 3 дней с момента последнего успешного резервного копирования. |
||
| 6 | Дату последнего резервного копирования берем, как дату изменения файла отчета о резервном копировании backup-report.file |
||
| 7 | |||
| 8 | У нас резервное копирование выполняет capabox. Свой отчет он создает в */var/tmp/capabox-pgsql-srvdb.position* |
||
| 9 | |||
| 10 | Команда очистки архивов выглядит так: |
||
| 11 | |||
| 12 | *pg_cleanup_backedup_archive.sh /srv/db/pgsql/9.2/pg_archive /var/tmp/capabox-pgsql-srvdb.position* |
||
| 13 | |||
| 14 | h2. Сам скрипт |
||
| 15 | |||
| 16 | h3. pg_cleanup_backedup_archives.sh |
||
| 17 | 1 | Андрей Волков | |
| 18 | <pre> |
||
| 19 | <code class="bash"> |
||
| 20 | #!/bin/bash |
||
| 21 | |||
| 22 | DAYS_BEFORE_LAST_BACKUP=3 |
||
| 23 | |||
| 24 | if [ -z "${2}" ]; then |
||
| 25 | echo "USEAGE: ${0##*/} /path/to/pg_archive backup-report.file" >&2 |
||
| 26 | exit 1 |
||
| 27 | fi |
||
| 28 | |||
| 29 | PG_ARCHIVE_DIRECTORY="${1}" |
||
| 30 | BACKUP_REPORT_FILE="${2}" |
||
| 31 | |||
| 32 | if [ ! -w "${PG_ARCHIVE_DIRECTORY}" ]; then |
||
| 33 | echo "Archive directory '${PG_ARCHIVE_DIRECTORY}' is not writable" >&2 |
||
| 34 | exit 1 |
||
| 35 | fi |
||
| 36 | |||
| 37 | if [ ! -e "${BACKUP_REPORT_FILE}" ]; then |
||
| 38 | echo "File '${BACKUP_REPORT_FILE}' not found" >&2 |
||
| 39 | exit 1 |
||
| 40 | fi |
||
| 41 | |||
| 42 | SEARCH_DAYS_AGO=$[($(date +'%s')-$(stat -c '%Y' "${BACKUP_REPORT_FILE}"))/24/3600+${DAYS_BEFORE_LAST_BACKUP}] || exit 1 |
||
| 43 | |||
| 44 | OLD_BACKUPS=$(find "${PG_ARCHIVE_DIRECTORY}" -type f -name "*.backup" -mtime +"${SEARCH_DAYS_AGO}" -printf '%f\n') || exit 1 |
||
| 45 | |||
| 46 | if [ -n "${OLD_BACKUPS}" ]; then |
||
| 47 | pg_archivecleanup "${PG_ARCHIVE_DIRECTORY}" $(echo "${OLD_BACKUPS}" |sort | tail -n 1) || exit 1 |
||
| 48 | |||
| 49 | for NAME in ${OLD_BACKUPS}; do |
||
| 50 | rm -f "${PG_ARCHIVE_DIRECTORY}/${NAME}" || exit 1 |
||
| 51 | done |
||
| 52 | fi |
||
| 53 | </code> |
||
| 54 | </pre> |