Чи працює запуск pg_dump на живому db послідовному резервному копії?


37

У мене є база даних 3 Гб, яка постійно змінюється, і мені потрібно робити резервні копії, не зупиняючи сервер (Postgres 8.3).

Мій pg_dump працює 5 хвилин. Що робити, якщо дані змінюються під час процесу? Чи отримую послідовне резервне копіювання? Я не хочу дізнатися, коли трапляються катастрофи.

Документація Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html про це нічого не говорить.


4
Привіт Роддіку. Я настійно рекомендую протестувати процес відновлення перед катастрофою. Налаштуйте іншу машину та відновіть її за допомогою однієї зі своїх резервних копій.
Дерек Дауні

Відповіді:


53

З посібника :

Це робить послідовні резервні копії, навіть якщо база даних використовується одночасно.

Так що так, ви можете довірити резервну копію. Звичайно, це PostgreSQL, ви можете довіряти свої дані в PostgreSQL.


10
Я буквально LOL'd, коли я читав "ви можете довіряти свої дані в PostgreSQL" :)
François Beausoleil

Посилання на посібник було б непогано
Pablo Fernandez

1
@PabloFernandez: Готово!
Френк Хайкенс

1
Однак логічне резервне копіювання в реальній базі даних заблокує ваші таблиці, не пропустіть цю інформацію. Можливо, ви знайдете поради: compose.com/articles/…
tryp

Тож будь ласка, що таке смішного в цьому? Чи повинен я припинити використання postgresql?
777А

12

pg_dump починає транзакцію, аналогічно тому, як буде працювати будь-який інший тривалий запит. Гарантії послідовності існують завдяки впровадженню MVCC . Дамп завжди буде самовідповідним у межах цих правил.

Усі нечіткі частини MVCC є навколо таких речей, як, наприклад, порядок UPDATE-транзакцій стає видимим для інших клієнтів та як придбані блоки. pg_dump суворо стосується впорядкування та отримує блокування читання у всій базі даних, щоб скинути його. Для більшості людей саме цього вони очікують, а застосовуваний механізм ніколи не викликає проблем. Основний ризик одночасності полягає в тому, що клієнти, які намагаються змінити структуру бази даних, будуть заблоковані під час роботи дампа. Це не впливає на якість сміття.


11

Звалище починається з налаштування TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Прочитайте посібник на Ізоляцію транзакцій і, наприклад, обговорення цього списку користувачів .

Цитата:

Резервне копіювання буде бачити лише транзакції, здійснені до встановлення рівня ізоляції.

В основному все після pg_dumpвстановлення рівня ізоляції транзакцій є нечастиною цього демпінгу.

Операції читання / запису протягом цього часу не впливають (блокуються).


-1

Спочатку вибачте за відповідь на цю стару тему. Але зі свого досвіду я не можу підтвердити твердження, що можна довіряти pg_dump /

Я перейшов декілька місяців тому для проекту на постгреси. І звичайно, я зробив усі резервні копії з pg_dump з живої системи, як було запропоновано. Але після першої резервної перевірки я з'ясував, що всі смітники мають різні розміри. Після відновлення випадкових деяких з них я зрозумів, що деякі таблиці відсутні. Тож я почав аналізувати, чому це відбувається, і я зрозумів, що якщо накладене додаток, наприклад, сервери додатків, блокування деяких таблиць та pg_dump, не чекають, поки вони не будуть звільнені. Мені потрібно було щоразу зупиняти сервер на період резервного копіювання, що не є хорошим рішенням.

Тому я все ще шукаю виправлення, але, як я вже сказав, я цілком не згоден із твердженням, що ви можете довіряти pg_dump.


Якщо це станеться, це було б серйозно в pg_dump. Яку версію ви використовуєте? Моє запитання було 3 роки тому, і зараз я перебуваю на 9.3 і червоних Amazon, які створюють резервні копії, мабуть, використовуючи pg_dump. Вони не можуть помилитися.
Роман

Ви можете довіряти pg_dump, щоб зробити серіалізовану резервну копію (див. Мою відповідь за посиланнями / документами та кількома деталями). Однак під час моїх читань я читав, що ви не повинні змінювати структуру самої БД, хоча я не змогла копати глибше на цьому . Оскільки ми робимо лише вставлення / оновлення / видалення, я не можу коментувати створення таблиць. Для нас я просто переконався не створювати таблиці під час pg_dump.
Денніс Нолте

2
Ваші твердження або вказують на серйозну помилку (ви подали звіт про помилку?), Або серйозну помилку в тому, як ви скидаєте базу даних, або якісь непорозуміння. Не маючи жодних фактів, серед них не можна визначитися.
dezso
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.