Как PostgreSQL обрабатывает контрольные точки в середине резервной копии с поддержкой WAL?

17

На PostgreSQL v9.0 у меня работает система архивации WAL. Таким образом, WAL регулярно архивирует файлы (когда создается 3 WAL или если WAL старше 15 минут).

Теперь я добавляю двоичный пакет каталога PG_DATA (исключая подкаталог pg_xlog). Для этого я выполнить pg_start_backup(),двоичную копию, а pg_stop_backup().

Мне кажется, я хорошо понимаю, что делают pg_start_backup и pg_stop_backup: первый создает контрольную точку, а последний гарантирует, что последний файл WAL заархивирован.

Из официальной документации видно, что для копии двоичных данных мы должны:

Выполните резервное копирование, используя любой удобный инструмент для резервного копирования файловой системы, такой как tar или cpio (не pg_dump или pg_dumpall). Нет необходимости или нежелательно останавливать нормальную работу базы данных, пока вы делаете это.

Так что я довольно озадачен. Это означает, что контрольная точка может быть выполнена, пока мы делаем копию. Я видел много документации, утверждающей, что команда copy должна разрешать изменения данных при выполнении копирования, я в порядке с этим, просто вопрос поиска правильного инструмента. Но мой вопрос заключается в том, как postgreSQL будет обрабатывать восстановление с содержимым pg_data, содержащим некоторые файлы, которые являются несовместимыми (некоторые до контрольной точки, некоторые после)?

При воспроизведении журналов транзакций Postgresql сможет перевести все эти файлы в правильное состояние? Я видел, что создание таблиц и операции удаления опасны во время выполнения резервного копирования. Разве не существует таких опасных операций, как вакуумные команды? Pg_backup приостанавливает вакуумные операции? Должен ли я сделать копию файла global / pg_control в конце начала двоичного процесса копирования? Должен ли я использовать файловую систему с поддержкой моментальных снимков (например, с xfs-freeze), чтобы ускорить процесс восстановления?

Я видел, что сбой сценария резервного копирования не запускает pg_stop_backup автоматически, поэтому есть вероятность, что мое состояние резервного копирования будет действовать в течение длительного времени (пока мои nagios не позвонят кому-нибудь, чтобы починить pg_stop_backup ()). Так что, если что-то в PostgreSQL отличается между этими двумя командами, я бы хотел это знать, чтобы понять, какое влияние это может оказать.

Просвети меня, пожалуйста.

regilero
источник

Ответы:

7

Ты спрашивал:

как postgreSQL будет обрабатывать восстановление с содержимым pg_data, содержащим некоторые несовместимые файлы.

pg_start_backup()убедитесь, что файл данных, по крайней мере, так же нов, как контрольная точка. На восстановление логи прилагаются.

Если данные старые, журнал обновит их ..

Если данные новые, журнал будет иметь такое же содержание. Нет ничего плохого в том, чтобы писать это снова.

Данные никогда не будут новее, чем журнал, потому что журналы записываются вперед (WAL).


Ты спрашивал:

... xfs-freeze...

xfs-freezeЭто похоже на то pg_start_backup(), что это не снимок. Вам нужен менеджер громкости, чтобы сделать это.


Ты спрашивал:

... почему создание табличного пространства и создание базы данных не поддерживаются, если WAL может воспроизвести все?

Это поддерживается, просто немного гоча. См. Http://www.postgresql.org/docs/8.1/static/backup-online.html :

23.3.5. Предостережения

Команды CREATE TABLESPACE регистрируются в WAL с буквальным абсолютным путем и поэтому будут воспроизведены как создания табличного пространства с тем же абсолютным путем. Это может быть нежелательно, если журнал воспроизводится на другом компьютере. Это может быть опасно, даже если журнал воспроизводится на том же компьютере, но в новом каталоге данных: воспроизведение все равно перезапишет содержимое исходного табличного пространства. Чтобы избежать потенциальных ошибок такого рода, рекомендуется создавать новую базовую резервную копию после создания или удаления табличных пространств.

J-16 SDiZ
источник
о xfs-freeze Я знаю, что это также зависит от менеджера томов, это была лишь часть процедуры создания снимков. но уверены ли мы, что восстановление WAL хорошо справится с воспроизведением журналов таблицы до вакуума на двоичной таблице после вакуума? и важно ли содержание global / pg_control? почему создание табличного пространства и создание базы данных не поддерживаются, если WAL может воспроизвести все?
Regilero
CREATE TABLESPACEработает. см обновленный ответ. Я не уверен VACUUM, но не могу представить, почему это не так.
J-16 SDiZ