![]() |
![]() |
![]() |
Архивация и восстановление данных Архивация и восстановление данных занимают важное место в работе любого администратора базы данных. Ни одна система не застрахована от сбоев жесткого диска, неосторожности пользователей или других потенциальных несчастий, приводящих к порче данных PostgreSQL. В этом разделе описаны два общих способа архивации данных. В первом варианте приложение pg_dump, входящее в комплект поставки PostgreSQL, генерирует набор команд SQL для полной архивации базы данных. Второй вариант основан на архивации файловой системы сервера. Приложение pg_dump Приложение pg_dump запускается в режиме командной строки и строит серию команд SQL. Выполнение этих команд в указанном порядке позволяет полностью воссоздать базу данных. Синтаксис приложения pg_dump: pg_dump [ параметры ]база_данных Параметр база_данных определяет имя базы данных, для которой генерируются команды SQL. Строка параметров имеет такой же формат, как у других утилит управления базами данных (например, createdb). В ней чаще всего передается ключ - f для определения файла, в котором сохраняются сгенерированные команды. ПРИМЕЧАНИЕ Если флаг -f не указан, сгенерированные команды SQL вместо записи в файл выводятся в поток stdout. Ниже приведен полный список ключей приложения pg_dump.
По умолчанию приложение pg_dump может запускаться любым системным пользователем, но пользователь, подключающийся к PostgreSQL, должен обладать правом выборки для всех объектов в архивируемой базе данных. В листинге 9.20 приведен пример использования программы pg_dump пользователем manager для базы данных booktown. Ключ -С включает в архив команду CREATE DATABASE. Эта команда включается не всегда, поскольку в некоторых случаях база данных создается заранее в нестандартной конфигурации. Листинг 9.20. Использование приложения pg_dump [jworsley@booktown -]$ pg_dump -u -C -f booktown.sql booktown Username: manager Password: [jworsley@booktown -]$ Is -1 booktown.sql -rw-rw-r-- 1 jworsley jworsley 46542 Sep 13 16:42 booktown.sql Приложение pg_dump поддерживает стандартные параметры хостовых соединений (ключи -h, -u и -р), что позволяет выполнять удаленную архивацию с любого хоста, которому разрешено удаленное подключение в соответствии с содержимым файла pgjiba.conf (более подробная информация приведена в главе 8). В листинге 9.21 производится подключение с удаленного сервера к серверу booktown.commandprompt.com для создания архивного файла в формате gzip (ключ -F с) с именем booktown.sql.tar.gz. Листинг 9.21. Удаленный запуск pg_dump [jworsley@cmd ~]$ pg_dump -u -h booktown.commandprompt.com \ -F с -f booktown.sql.tar.gz booktown Username: manager Password: [jworsley@cmd -]$ Is -1 booktown.sql.tar.gz -rw-rw-r-&th1nsp:- 1 jworsley jworsley 45909 Sep 13 17:12 booktown.sql.tar.gz Если архивный файл должен содержать большие двоичные объекты, воспользуйтесь форматом tar (t) или gzip (с), потому что текстовый формат не дает такой возможности. В остальных случаях обычных текстовых архивов бывает вполне достаточно. Архивы в формате tar нередко более чем в два раза превышают по объему свои текстовые прототипы, даже если они не содержат двоичных объектов. Дело в том, что в формат tar включается иерархическое оглавление файлов .dat. В этом оглавлении хранится информация, необходимая для распаковки формата tar соответствующей командой pg_restore; дополнительные инструкции занимают лишнее место на диске. Поскольку tar архивирует файлы без сжатия, был предусмотрен формат с, обеспечивающий автоматическое сжатие tar-файлов в формат gzip. Приложение pg_dumpall В PostgreSQL также существует приложение pg_dumpall, которое является своего рода «оболочкой» для вызова программы pg_dump. Основная функция этого приложения заключается в одновременной архивации всего кластера баз данных PostgreSQL в системе без вызова pg_dump для всех баз данных по очереди. Синтаксис команды pg_dumpaTl, выводимый с флагом - -help: pg_dumpall [ -с ] [ -h хост ] [ -р порт ] [ -д ] Приложение pg_dumpall получает те же параметры подключения, что и приложение pg_dump. Ниже перечислены ключи pg_dumpall.
ВНИМАНИЕ Не выполняйте команду pg_dumpall с ключом -?. Это приведет к тому, что ключ будет передан приложению pg_dump для каждой базы и выходные данные займут гораздо больше места, чем можно предположить. Для получения справки о команде pg_dumpall используется ключ --help. Обратите внимание: в PostgreSQL 7.1.x возможности сценария pg_dumpall несколько ограничены по сравнению с обычным сценарием pg_dump. Например, ключ -и не позволяет передать другое имя пользователя и пароль, а ключ -F не может задать другой формат, кроме простого текста (архивы создаются в текстовом виде независимо от выбранного формата). Отсюда следует, что ключ -Ь тоже не может передаваться программе pg_dumpall, поскольку для него необходимы другие форматы, кроме текстового. Хотя приложению pg_dump можно передать имя файла при помощи ключа -f, полученный архив будет неполным, поскольку глобальные данные pg_dumpall все равно направляются в поток stdout. Проблемы с ключом ^решаются перенаправлением вывода pg_dumpall в файл средствами командного интерпретатора (>). Отсутствие ключа -и компенсируется простым присваиванием переменной среды PGUSER. А если вы подключаетесь к системе, требующей аутентификации с использованием пароля, и не хотите отдельно передавать пароль для каждой архивируемой базы данных, присвойте значение переменной PGPASSWORD. В листинге 9.22 приведена простая команда bash для определения временной переменной среды PGUSER при вызове клиента PostgreSQL Хотя необходимость в таких переменных возникает редко, это полезный прием, о котором следует помнить в некоторых специфических случаях — например, при работе со сценарием pg_dumpall. В листинге 9.22 переменная PGUSER обеспечивает создание одного архивного файла для всех баз данных. Листинг 9.22. Использование команды pg_dumpall [jworsley@booktown -]$ PGUSER=postgres pg_dumpall > all.sql Первая часть команды, приведенной в листинге 9.22, присваивает временной переменной PGUSER значение postgres. Переменная создается на время работы pg_dumpall и прекращает свое существование при завершении программы. ПРИМЕЧАНИЕ В общем случае приложение pg_dumpall должно выполняться суперпользователем PostgreSQL. Это связано с тем, что команда pg_dumpall обращается к системным каталогам PostgreSQL, поскольку наряду с объектами баз данных она архивирует глобальные объекты. Команду pg_dumpal 1 также можно выполнять в удаленном режиме, хотя для этого следует задать значения всех необходимых переменных среды. Процедура сильна зависит от настройки удаленного хоста в файле pg_hba.conf. Команда pg_dumpa11 используется в ситуациях, когда базы данных особенно не удобно архивировать по отдельности или при наличии сложной системы пользо вателей и групп. Если вам мешают ограничения pg_dumpall в области вывода дан ных (особенно если ваша база данных использует большие объекты), проще всеп выполнить команду pg_dumpal1 с ключом -д, чтобы заархивировать все данные пользователей и групп, и затем поочередно вызвать программу pg_dump для все) баз данных, которые необходимо заархивировать. |
![]() |
![]() |
![]() |