Postgresql архівація і відновлення даних

Копіювання та відновлення даних

Копіювання та відновлення даних займають важливе місце в роботі будь-якого адміністратора бази даних. Жодна система не застрахована від збоїв жорсткого диска, необережності користувачів або інших потенційних нещасть, що призводять до псування даних PostgreSQL.

У цьому розділі описані два загальних способу архівації даних. У першому варіанті додаток pg_dump, що входить в комплект поставки PostgreSQL, генерує набір команд SQL для повної архівації бази даних. Другий варіант заснований на архівації файлової системи сервера.

Додаток 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

] $ Pg_dump -u -h booktown.commandprompt.com \

-F з -f booktown.sql.tar.gz booktown

[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.

У PostgreSQL також існує додаток pg_dumpall, яке є свого роду «оболонкою» для виклику програми pg_dump. Основна функція цього додатка полягає в одночасній архівації всього кластера баз даних PostgreSQL в системі без виклику pg_dump для всіх баз даних по черзі. Синтаксис команди pg_dumpaTl, виведений з прапором - -help:

pg_dumpall [-з] [-h хост] [-р порт] [-д]

Додаток pg_dumpall отримує такі самі установки, що і додаток pg_dump. Нижче перераховані ключі pg_dumpall.

  • -с. Командам SQL, що створює глобальні об'єкти, повинні передувати команди видалення цих об'єктів.
  • -h хост, - -host = .roaw. Хост, з яким встановлюється зв'язок замість хоста local host або хоста, що визначається змінного середовища PGHOST. Використовується в тих випадках, коли архівіруемих база даних знаходиться на іншому сервері.
  • -р порт, --port = nopm. Порт, за яким має здійснюватися підключення до сервера, замість порту за замовчуванням (зазвичай 5432).
  • -g, --globals-only. Архівуються тільки глобальні об'єкти. Зазвичай цей режим використовується при відтворенні користувачів і груп, а також їх дублювання на іншому комп'ютері (архів переноситься на інший комп'ютер і відновлюється). При установці ключа-д перед виконанням команд CREATE з таблиці pg_shadow автоматично видаляються всі користувачі. Будьте уважні!

Не об'єднуйте свій пристрій команду 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 для все) баз даних , які необхідно заархівувати.

Схожі статті