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> |