Як отримати робочу та повну резервну копію та тест PostgreSQL БД


45

Я сподівався, що зможу отримати чітку відповідь про те, як забезпечити отримання повної резервної копії Postgres так, як ви отримаєте з MS SQL Server, а потім подбати про дітей-сиріт.

З того, що я прочитав, і це може бути неправильним, пошук хорошого блогу PostgreSQL був складним завданням, тому, будь ласка, не соромтесь порекомендувати мені, мені потрібно зрозуміти, як працює ця програма, щоб я міг довіряти своїм резервним копіям та Слоні тиражування. У мене був відновити розробник резервної копії, яку я взяв з PgadminIII через custom, directoryі tarформат під час вибору OIDs, але він сказав, що два з них не завантажуються, tarале це був лише каталог, а не дані. Зараз я справді розгублений.

  1. Я використовую PGAdminIII, він має pg_dumpі pg_dumpallваріант. Я хочу створити резервне копіювання всього , що мені потрібно, щоб перевірити відновлення цієї бази десь і переконатися, що так, всі потрібні нам дані та наше резервне копіювання добре. Врешті-решт я хочу написати сценарій автоматичного відновлення, але один за одним.

pg_dumpallМабуть, є -globalsваріант, який повинен створити резервну копію всього, але допомога для pg_dumpallшоу a -g, --globals-only dump only global objects, no databases, а не --globalsваріант.

Я думав, pg_dumpallщо хоча б резервні копії іноземних ключів, але навіть це здається "варіантом". Згідно з документацією , навіть якщо pg_dumpallмені потрібно використовувати -oопцію для резервного копіювання іноземних ключів, я не можу реально уявити, коли я не хотів би робити резервні копії іноземних ключів, і це матиме більше сенсу як параметри за замовчуванням.

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

У мене був сервер PostgreSQL, але я все ще не можу зрозуміти, чому програма не створює резервну копію OIDs за замовчуванням! Здається, що у 99,9% часу ви цього хотіли б.

ОНОВЛЕННЯ 1:

У документації Postgres згадується, що globalsпараметр, який я шукав, здається, є варіантом за замовчуванням у цій версії, але він все ще потребує цього -o. Якщо хтось може перевірити або надати мені приклад команди відновити єдину базу даних в іншому місці з усім необхідним, я буду вдячний.

Редагувати: запитуючи на сайті, щоб показати унікальність цього питання, відредагувавши моє запитання. Це питання піднімає проблему та отримує чіткість щодо OID під час резервного копіювання, різницю між глобальними та неглобальними, а також тестування відновлює рекомендації щодо забезпечення резервного копіювання на відміну від простого резервного копіювання. Завдяки відповідям я зміг створити резервну копію, розібратися в глобальних тонах / оїдах і розпочав тестовий процес відновлення щовечора на Postgres, використовуючи завдання cron. Дякую за допомогу!


Відповіді:


58

Ви можете скинути весь кластер PostgreSQL за допомогою pg_dumpall. Ось і всі бази даних та всі глобальні мережі для одного кластеру. З командного рядка на сервері я б зробив щось подібне. (Моє прослуховування на порту 5433, а не на порту за замовчуванням.) Можливо, вам може знадобитися опція --clean.

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

Сюди входять глобалі - інформація про користувачів та групи, табличні простори тощо.

Якби я збирався створити резервну копію однієї бази даних і перемістити її на сервер подряпин , я б скидав базу даних за допомогою pg_dump і скидав глобальні версії з будь-яким

  • pg_dumpall --globals-only, або
  • pg_dumpall --roles-only (якщо вам потрібні лише ролі)

подобається це.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

Виходи - це лише текстові файли.

Після переміщення цих файлів на інший сервер спочатку завантажте глобалі, а потім дамп із бази даних.

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

Я думав, що pg_dumpall принаймні створить резервні копії сторонніх ключів, але навіть це здається "варіантом". Відповідно до: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.html навіть за допомогою pg_dumpall мені потрібно використовувати опцію -o для резервного копіювання іноземних ключів

Ні, ця посилання говорить "Використовуйте цю опцію, якщо ваша програма якимось чином посилається на стовпці OID (наприклад, з обмеженням іноземного ключа). В іншому випадку цю опцію не слід використовувати." (Акцент додано.) Я думаю, що навряд чи ваша програма посилається на стовпці OID. Вам не потрібно використовувати цю опцію для "резервного копіювання іноземних ключів". (Прочитайте файл дамп у вашому редакторі чи переглядачі файлів.)


3
Чи не відсутнє ім'я бази даних у рядку, куди імпортується sandbox.sql? psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK

Він бачить, що pg_dumpallверсія 9.5 не працює правильно зі NULLзначеннями при використанні COPY. Я отримую багато таких помилок: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.При імпорті назад до Postgres 10 за допомогоюpsql -f /tmp/dumpall.sql
piotrekkr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.