Все админы делятся на 2 категории
— те которые уже делают бэкап
и те которые ещё не делают.
- Что такое PostgreSQL?
PostgreSQL является современной системой управления базами данных, часто используемая для хранения и обработки информации, связанной с веб-сайтами или сторонними приложениями. У любой базы данных, важно вовремя реализовать резервное копирование, чтобы избежать возможную потерю данных.
В этом посте я постараюсь рассказать о некоторых способах, которыми вы можете сделать резервную копию PostgreSQL. Для тестов будем использовать Ubuntu 12,04 VPS с PostgreSQL 9.1. Для большинства современных дистрибутивов и последних версии PostgreSQL мои советы будут актуальны.
- Создание резервной копии PostgreSQL при помощи pg_dump
PostgreSQL включает в себя утилиту под названием «pg_dump», которая позволяет сделать дамп базы данных в файл. Утилита консольная, синтаксис достаточно простой:
pg_dump name_of_database > name_of_backup_file
Команда должна быть запущена под пользователем с привилегиями на чтение базы данных.
Как вариант мы можем войти через sudo под пользователем «рostgres» и выполнить команду:
sudo su - postgres pg_dump postgres > postgres_db.bak
«pg_dump» — это «полноценный» клиент PostgreSQL, т.е. при необходимости её можно запустить с удаленной машины, если имеются соответствующие разрешения к базе данных.
Расширенный синтаксис выглядит следующим образом:
pg_dump -h remote_host -p remote_port name_of_database > name_of_backup_file pg_dump -U user_name -h remote_host -p remote_port name_of_database > name_of_backup_file
- Как восстановить дампы pg_dump в PostgreSQL
Чтобы восстановить резервную копию, созданную pg_dump, необходимо перенаправить файл с дампом в стандартный ввод psql:
psql empty_database < backup_file
Эта операция не создает новую базу данных. Об этом необходимо позаботиться заранее.
Для примера, создадим новую базу данных под названием «restored_database», а затем развернем дамп под названием «database.bak»:
createdb -T template0 restored_database psql restored_database < database.bak
Пустая база данных должна быть создана при помощи шаблона «template0«. Так же нам необходимо убедиться в наличии пользователя с необходимыми правами на создаваемую базу, в противном случае нам придется создать нового:
createuser test_user psql restored_database < database.bak
- Возможные ошибки
По умолчанию, PostgreSQL будет пытаться продолжить восстановление базы данных, даже если он сталкнется с ошибками. По многим причинам так делать не стоит. Мы можем явно указать PostgreSQL на остановку, в случае любой ошибки:
psql --set ON_ERROR_STOP=on restored_database < backup_file
С данной опцией мы получим частично восстановленную базу данных.
Можно попробовать восстановить весь дамп в одну транзацию, т.е. бекап будет или полностью восстановлен или не восстановлен совсем. Данный режим может быть задан, с помощью опций -1 или —single-transaction для psql.
psql -1 restored_database < backup_file
При этом любая ошибка приведет к откату процесса восстановления, что может потребовать достаточно продолжительного времени.
- Резервное копирование и восстановление всех баз данных в PostgreSQL
Чтобы сэкономить время, можно сделать резервную копию всех баз данных в вашей системе, при помощи утилиты «pg_dumpall»:
pg_dumpall > backup_file
Похожим способом можно восстановить базы данных:
psql -f backup_file postgres
Резервные копии являются важным аспектом при любой работе с данными. К счастью, PostgreSQL включает утилиты, необходимые для эффективного резервного копирования важной информации. Как с любым видом резервного копирования, важно регулярно проверять свои резервные копии.
В качестве дополнения скрипт, который создает резервную копию с меткой времени и сохраняет последние 14 резервных копий:
ls -t *.sql | sed -e '1,13d' | xargs -d '\n' rm echo Done at `date +\%Y-\%m-\%d_\%T` pg_dump dbname --username=dbuser > `date +\%Y-\%m-\%d_\%T`.sql