Всем привет!
Надеюсь кто-то уже читал мою статью 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 для централизованного бэкапа всего что нужно.