1С и Postgres: Бэкап
Для начала пару слов о том, зачем и когда он нужен. Ни для кого не секрет, что сервер это не просто компьютер, а надежный компьютер! Поэтому, если он не сломался в первую неделю после запуска, то не сломается еще очень долго. И поэтому у вас всегда есть возможность какое-то время оставаться вовсе без резервной копии
- Описание
- Подробнее
Описание
Всем привет!
Надеюсь кто-то уже читал мою статью 1С и Postgres: Введение? Если нет, ну и черт с ней 🙂
Сегодня напишу про нюансы с бэкапом.
Самым узким местом любого сервера на сегодняшний день есть его дисковая подсистема. И поэтому все стараются сделать так, чтобы снизить риски именно в этой части.
Поскольку бэкап подразумевает что вы чего-то боитесь, это значит что есть РИСК.
Какие могут быть риски: вылетел винт, вылетела оперативная память, вылетела сетевуха, вылетела мать и пр. Все эти риски приводят к одному результату — краху БД.
Все риски, кроме «вылетел винт» я опишу в статье 1С и Postgres: Кластер.
Существует три класических схемы построения хранилища:
1. Сервер — Диск
2. Сервер — Рейд — Диски
3. Сервер — FB/SCSI/SAS свитч — Сторадж (Райд+Диски)
Нюанс 1. Бэкап для случая «Сервер — Диск»
Если у вас именно так все организованно, то вам обязательно и как минимум одн раз в день нужно делать бэкап. Привожу пример:
#pg_dump $d | gzip -c > $DIR/$d.dmp.gz
где $d — имя вашей БД, а $DIR — каталог для бэкапов
Но это не все. Смысла хранить бэкап там же где и сама БД нет смысла, поэтому позаботьтесь о копии на SAN или NAS или USB HDD или флешку. Пример:
#scp -P $PORT $DIR/$d.dmp.gz $RHOST:$RDIR
где $PORT — порт вашего ssh, $RHOST — удаленный хост, куда копируем, $RDIR — каталог на удаленном хосте куда копируем
Как скопировать на USB или samba хост, google найдет вам много примеров.
Важно! Копируйте бэкап в течении недели в разные каталоги. Пример:
DAY=`date +%u`
RDIR=/var/lib/pgsql/backup/daily/$DAY
`ssh -p $PORT $RHOST «rm -f $RDIR/$d.dmp.gz»`
if `scp -P $PORT $DIR/$d.dmp.gz $RHOST:$RDIR`
then
echo «: Remote copy $dc backup to $RHOST/$RDIR complete.»
else
echo «: Remote copy $dc.dmp.gz to $RHOST FAILED.»
fi
Здесь главное обратить внимание на DAY. $DAY — это день недели от 1 до 7. Таким образом у вас будет хранится постоянно семь актуальных бэкапов ваших БД.
Нюанс 2. Бэкап для случая «Сервер — Райд — Диск» и «Сервер — FB/SCSI/SAS свитч — Сторадж (Райд+Диски)«
В таком случае риск потери данных ниже, но все же есть.
Райд (RAID) — это ваш способ выиграть время! Используйте RAID 0 только если вы уверены, что вы в безопасности. В остальных случаях это:
а) много дисков, 6 шт и более — RAID 10
б) много дисков, но скорость не важна, гланое надежность — RAID 5 или RAID 6
в) мало дисков, до 6 шт — RAID 5
г) 2 диска — RAID 1
в) супернадежность и много дисков — RAID 50 или RAID 60
Бэкап делаем также как описано выше.
Заключение
Сделав бэкап тем же pg_dump, если есть возможность, обязательно распакуйте и проверьте его.
Вы спросите как? Просто залейте его в новую БД. Мало сделать бэкап, нужно еще быть уверенным, что он не битый!
Я на практике применяю Bacula для централизованного бэкапа всего что нужно.

