Выполняет ли pg_dump на live 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» :)
Франсуа Босолей
Ссылка на руководство была бы хороша
Пабло Фернандес
1
@PabloFernandez: Готово!
Фрэнк Хейкенс
1
Однако логическое резервное копирование в действующей базе данных заблокирует ваши таблицы, не пропустите эту информацию. Может быть, вы найдете несколько советов: compose.com/articles/…
tryp
Так что, пожалуйста, что тут смешного? Должен ли я прекратить использование postgresql?
777Anon
12

pg_dump запускает транзакцию, аналогично тому, как будет работать любой другой длительный запрос. Гарантии согласованности исходят от реализации MVCC . Дамп всегда будет самосогласованным в рамках этих правил.

Все нечеткие части MVCC связаны с такими вещами, как то, как транзакции UPDATE порядка становятся видимыми для других клиентов, и как получаются блокировки. pg_dump строго следит за порядком и получает блокировку чтения для всей базы данных, чтобы сбросить ее. Для большинства людей это то, что они ожидают, и используемый механизм никогда не вызывает никаких проблем. Основной риск параллелизма заключается в том, что клиенты, пытающиеся изменить структуру базы данных, будут заблокированы во время работы дампа. Это не влияет на качество свалки, хотя.

Грег Смит
источник
11

Дамп начинается с настройки TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Пожалуйста, прочитайте руководство по изоляции транзакций и, например, обсуждение списка пользователей об этом .

Quote:

Резервная копия будет видеть только транзакции, которые были зафиксированы до того, как был установлен уровень изоляции.

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

Операции чтения / записи в это время не блокируются.

Деннис Нолте
источник
-1

Сначала извините за ответ на этой старой теме. Но из моего опыта я не могу подтвердить утверждение, что вы можете доверять pg_dump /

Несколько месяцев назад я переключился на проект на postgres. И, конечно, я сделал все резервные копии с помощью pg_dump из действующей системы, как было предложено. Но после первой проверки бекапа я выяснил, что все дампы имеют разные размеры. Восстановив некоторые из них случайным образом, я обнаружил, что некоторые таблицы отсутствуют. Поэтому я начал анализировать, почему это происходит, и выяснил, что если наложенное приложение, например серверы приложений, блокировка некоторых таблиц и pg_dump, не ожидает их освобождения. Мне нужно было каждый раз останавливать сервер на время резервного копирования, что не является хорошим решением.

Поэтому я все еще ищу исправление, но, как я уже сказал, я совершенно не согласен с утверждением, что вы можете доверять pg_dump.

Пит Портер
источник
Если это произойдет, это будет серьезно в pg_dump. Какую версию вы используете? Мой вопрос был 3 года назад, и теперь я на 9.3 и Amazon красные, которые делают живые резервные копии, очевидно, с использованием pg_dump. Они не могут ошибаться.
Роман
Вы можете доверять pg_dump для выполнения сериализованного резервного копирования (см. Мой ответ для ссылок / документов и некоторых деталей). Однако во время моих чтений я прочитал, что вам не следует изменять структуру самой БД, хотя я не мог копать глубже на этом , Поскольку мы делаем только insert / update / delets, я не могу комментировать создание таблиц. Для нас я просто старался не создавать таблицы во время pg_dump.
Деннис Нольте
2
Ваши заявления либо указывают на серьезную ошибку (вы подали отчет об ошибке?), Серьезную ошибку в том, как вы выкидываете свою базу данных, либо на какое-то недопонимание. Не имея каких-либо фактов, нельзя выбирать среди них.
Дезсо