gifts2017

1С и Postgres: Бэкап

Опубликовал Александр Сединкин (alexcid) в раздел Администрирование - Архивирование (backup)

Для начала пару слов о том, зачем и когда он нужен. Ни для кого не секрет, что сервер это не просто компьютер, а надежный компьютер! Поэтому, если он не сломался в первую неделю после запуска, то не сломается еще очень долго. И поэтому у вас всегда есть возможность какое-то время оставаться вовсе без резервной копии

Всем привет!

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Жданов (azhdan) 21.12.10 16:31
судя по тексту автор предлагает сразу бекапы сжимать..а автор не пробовал развернуть бекап базы размером около 30Г сжатый в архив?
2. Александр Сединкин (alexcid) 22.12.10 17:52
azhdan пишет:

судя по тексту автор предлагает сразу бекапы сжимать..а автор не пробовал развернуть бекап базы размером около 30Г сжатый в архив?

Пробовал и что? Неужели вы думаете, что винт быстрее пишет, чем процессор распаковывает архив?

#gunzip -c $d.dump.gz | psql database_name

P.S. Для примера БД 105 ГБ, время распаковки примерно 5 часов
3. VVV (V_V_V) 22.12.10 18:15
А перед pg_dump там сервер Postgres остановить, пользователей повыгонять нужно?
4. Александр Сединкин (alexcid) 25.12.10 02:12
V_V_V пишет:

А перед pg_dump там сервер Postgres остановить, пользователей повыгонять нужно?


Нет. Не обязательно.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа