|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
Доброе утро. опрос скорее всего глупый, но прошу сильно не пинать начинаю только разбирать pg_basebackup. Исходные данные: Используется Postgresql 10.3 Настраиваю pg_basebackup для регламентного создания резервной копии. Скрипт написал на powershell - все ок, но вопрос в другом. Политика резервного копирования у нас - восстановление на ночной бэкап (WAL не используется) Собственно вопрос: 1. Могу ли я при такой схеме в параметр --wal-method передать значение none и на что это повлияет? Т.е. логика у меня такая - WAL не используется, не нужно его и бэкапить. 2. Вопрос связан с п. 1, при использовании --wal-method отличного от значения none (т.е. в процессе бэкапа сохранять также WAL). Нужно ли мне для восстановления кластера PostgreSQL при необходимости помимо base.tar.gz восстанавливать pg_wal.tar.gz? И как это правильно делать? Ведь я правильно понимаю, что общий алгоритм восстановления из pg_basebackup это остановить текущий кластер и инициализировать этот же кластер заменив его данные на то, что есть в резервной копии pg_basebackup? (Ну или инициализировать новый кластер с помощью pg_ctl -D путь к резервной копии) 3. Вопрос по параметру --checkpoint: Что мне грозит, если я буду использовать fast? Ну и пункт 4: PostgreSQL используется под Windows (знаю, что лучше под linux, но пока в требованиях стоит Windows). Смотрим настройки pg_hba.conf, чтобы сделать возможность подключаться скрипту планировщика без пароля. Использовать .pgpass не особо хочется, поэтому и смотрим в сторону pg_hba. В linux, насколько я помню, мы использовали аутентификацию с типом peer или ident для localhost и она прекрасно отрабатывала. А какой тип аутентификации можно использовать для Windows? Хочется завязать определенного пользователя операционной системы к кластеру PostgreSQL. У клиента нет домена (обычный небольшой сервер). По идее можно для localhost поставить trust и не парится, но хочется рассмотреть еще варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 09:12 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
morohon Используется Postgresql 10.3 В чём смысл ходить по давно исправленным ошибкам? morohon Настраиваю pg_basebackup ... WAL не используется У вас нет бекапов. morohon --wal-method передать значение none и на что это повлияет? Т.е. логика у меня такая - WAL не используется, не нужно его и бэкапить. Восстановление из basebackup невозможно без WAL. Как самый минимум - все WAL с момента старта basebackup до момента его завершения. morohon 2. Вопрос связан с п. 1, при использовании --wal-method отличного от значения none (т.е. в процессе бэкапа сохранять также WAL). Нужно ли мне для восстановления кластера PostgreSQL при необходимости помимо base.tar.gz восстанавливать pg_wal.tar.gz? И как это правильно делать? Ведь я правильно понимаю, что общий алгоритм восстановления из pg_basebackup это остановить текущий кластер и инициализировать этот же кластер заменив его данные на то, что есть в резервной копии pg_basebackup? (Ну или инициализировать новый кластер с помощью pg_ctl -D путь к резервной копии) Восстановление из basebackup - распаковать basebackup, WAL и все tablespace (если есть) в пустую директорию, запустить базу указав PGDATA туда. morohon 3. Вопрос по параметру --checkpoint: Что мне грозит, если я буду использовать fast? некоторый пик по io из-за запрошенного явного чекпойнта. Если диски загибаются от чекпойнта - у вас большие проблемы. По такой экзотике как windows не отвечу. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 10:48 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
morohon Настраиваю pg_basebackup ... WAL не используется А это как? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 10:53 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
mefman, Melkij Видимо я неправильно применяю терминологию или недостаточно компетентен - прошу простить. Я имел ввиду, что политика резервного копирования не предполагает восстановление на момент времени. Касательно версии PostgreSQL - он используется для баз 1С: предприятия, поэтому такая экзотика (на новых версиях с патчами от фирмы 1С есть некоторые проблемы). Полагаю Melkij правильно указал, что у меня есть WAL с момента запуска процедуры резервного копирования с помощью pg_basebackup. Т.е. после создания бэкапа в папке есть два файла: base.tar.gz pg_wal.tar.gz Подскажите, правилен ли будет такой метод восстановления? 1. Остановить службу PostgreSQL 2. Распаковать в каталог (пути из головы для примера) D:\recovery архив base.tar.gz 3. В папку D:\recovery\pg_wal распаковать архив pg_wal.tar.gz 4. Инициализировать кластер pg_ctl -D D:\recovery Или я где-то не прав? Правильно ли я использовал архив pg_wal.tar.gz, который создан в процессе архивации? Я возможно задаю глупые вопросы, просто читаю официальную документацию и появляются вопросы на которые не нахожу ответа в интернете - поэтому и обратился сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 11:28 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
Melkij, Можете подробнее разъяснить фразу Melkijу вас нет бэкапов Это из-за того, что я неправильно применил терминологию? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 11:29 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
morohon mefman, Melkij Я имел ввиду, что политика резервного копирования не предполагает восстановление на момент времени. Тогда вам куда лучше и удобнее будет использовать pg_dump/pg_restore для таких задач. base backup - в таком случае из пушки по воробьям ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 12:32 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
Maxim Boguk, pg_dump сейчас используется, но я где-то читал, что он создает не консистентный бэкап базы данных. Поэтому, для надежности, используется pg_basebackup (т.е. фактически есть два бэкапа для БД - это pg_dump и pg_basebackup) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 12:44 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
morohon Melkij, Можете подробнее разъяснить фразу Melkijу вас нет бэкапов Это из-за того, что я неправильно применил терминологию? Что у вас с терминологией не знаю, но если у вас есть basebackup и нет WAL для его старта - этот basebackup лишь бесполезная гора хлама. Только и всего. morohon pg_dump сейчас используется, но я где-то читал, что он создает не консистентный бэкап базы данных pg_dump консистентен и более того транзакционен. morohon 4. Инициализировать кластер pg_ctl -D D:\recovery не инициализировать, а запустить. Ключевое слово после pg_ctl потеряли. И затем следить за логом что происходит. WAL - да, в pg_wal необходимо разместить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 13:29 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
Melkij, Спасибо за ответ. У меня видимо вот вся путаница из-за непонимания механизмов работы WAL в PostgreSQL. Получается даже если у меня не используется PITR, то при использовании pg_basebackup он все равно есть? Может быть у Вас есть стоящие ссылки, которыми можно в меня кинуть и отправить читать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 14:39 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
Melkij И затем следить за логом что происходит. Касательно вот этого, я попробовал на тестовом сервере и получился такой лог: < 2019-11-12 10:54:52.665 MSK >LOG: redo starts at 2/AE000028 < 2019-11-12 10:54:52.746 MSK >LOG: consistent recovery state reached at 2/AE0091D8 < 2019-11-12 10:54:52.747 MSK >LOG: invalid record length at 2/AF000198: wanted 24, got 0 < 2019-11-12 10:54:52.747 MSK >LOG: redo done at 2/AF000170 < 2019-11-12 10:54:52.748 MSK >LOG: last completed transaction was at log time 2019-11-12 04:04:00.378673+03 < 2019-11-12 10:54:53.310 MSK >LOG: database system is ready to accept connections После этого база стала доступна и в ней стало возможно работать. При этом файл backup-label был переименован в backup-label.old. Есть информация, что нужно смотреть в логе? Я изначально думал, что он не запустится т.к. потребуется еще файл recovery.conf, а он в итоге и не потребовался ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 14:44 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
morohon Получается даже если у меня не используется PITR, то при использовании pg_basebackup он все равно есть? WAL есть всегда, даже если у вас вообще никаких бекапов нет. Это основная штука обеспечения durability базы, любая запись данных (ну кроме temporary и unlogged таблиц) идёт сначала в WAL, затем уже в датафайлы таблиц. morohon Melkij И затем следить за логом что происходит. Касательно вот этого, я попробовал на тестовом сервере и получился такой лог: Да, это нормальный результат. Восстановление сделано верно. morohon При этом файл backup-label был переименован в backup-label.old. Есть информация, что нужно смотреть в логе? Я изначально думал, что он не запустится т.к. потребуется еще файл recovery.conf, а он в итоге и не потребовался recovery.conf (до pg12) или recovery.signal / standby.signal (12 и далее) - это для репликации или pitr. Если их нет - делается обычный crash recovery, как раз по backup-label если таковой есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 16:12 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
Начиная с версии Postgresql 10 утилита pg_basebackup использует временные физические слоты репликации, вернее два слота. Один используется для резервирования данных по протоколу, а второй для журналов WAL. Если вы не указываете явно wal-method, то по умолчанию используется значение --wal-method=stream. Это означает, что в резервную копию попадут все необходимые журналы и из такого бэкапа вы сможете успешно восстановиться. Теперь, представим, что вы решили указать --wal-method=none. В резервную копию журналы при этом не попадают. Возникает вопрос, зачем же нам такой бэкап, в котором нет журналов для успешного восстановления? Ответ кроется в том, что у вас может быть настроено непрерывное архивирование журналов. Например, у вас есть какой-то разделяемый ресурс, что-то типа "NTFS шары" и.т.п куда вы каким-то образом сохраняете журналы. И когда вам потребуется восстановить БД на какой-то период времени в прошлом, то есть PITR (Point In Time Recovery) вы в файле recovery.conf укажете где эти самые журналы искать. В бэкапе то у вас их может не быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 21:29 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
BigBudda, Melkij Огромное спасибо за подробные ответы - буду тщательнее читать документацию и пытаться вникнуть! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 09:36 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
Melkij, А подскажите пожалуйста еще по вот этому моменту: Melkijpg_dump консистентен и более того транзакционен. Так было всегда? Или были какие-то особенности у старых версий? Я также читал документацию postgresql и не нашел там подтверждения моим словам (то что он якобы не консистентен). Есть ли какие-нибудь минусы у pg_dump о которых нужно помнить? И в чем минусы относительно pg_basebackup? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 09:48 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
morohon Melkij, А подскажите пожалуйста еще по вот этому моменту: Melkijpg_dump консистентен и более того транзакционен. Так было всегда? Или были какие-то особенности у старых версий? Что было в давние времена не знаю, всё-таки эта база старше меня самого. В недавней истории - так было всегда. morohon Есть ли какие-нибудь минусы у pg_dump о которых нужно помнить? И в чем минусы относительно pg_basebackup? pg_dump - компактен - plain text он всегда plain text, восстанавливать данные можно хоть текстовым редактором - dir и custom форматы сжимаются, могут восстанавливаться параллельно (dir и сниматься в несколько потоков), могут восстанавливать объекты выборочно - медленное восстановление - переносим между версиями pg_basebackup - копия datadir, снимается/восстанавливается только целиком - скопировать просто файлики - обычно куда быстрее выполняется - не переносим между major версиями, потенциально и на более старые minor - не переносим между ОС и платформами. Была база 10.3 на win32 - только на win32 версиях 10.3 - 10.99 и возможно восстановить. На возможность восстановиться из бекапа проверять нужно любой бекап. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 11:55 |
|
PostgreSQL и pg_basebackup
|
|||
---|---|---|---|
#18+
авторТак было всегда? Или были какие-то особенности у старых версий? В настоящий момент сообществом поддерживаются версии с 9.4 и выше Это означает, что если у вас более старая версия Postgresql вам необходимо произвести upgrade. авторЕсть ли какие-нибудь минусы у pg_dump о которых нужно помнить? И в чем минусы относительно pg_basebackup? Добавлю к тому, что уже написано: pg_basebackup включает в себя статистику, pg_dump нет. Следовательно, когда вы восстанавливаетесь из дампа, статистику вам нужно собрать руками посредством analyze/vacuum analyze. pg_dump это логическая копия, а не физический бэкап. И с помощью pg_dump можно сделать логическую копию лишь одной БД. pg_dump средство больше для разработчика, чем для DBA. Когда вам целесообразно использовать pg_dump: 1.Миграция на другую архитектуру 2. Вам нужно выгрузить какую-то таблицу справочник, а не всю БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 12:29 |
|
|
start [/forum/topic.php?fid=53&msg=39888020&tid=1994945]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 142ms |
0 / 0 |