Проект

Общее

Профиль

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>