Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
привет

postgresql11

подскажите, как правильно делать восстановление на момент времени?
делаю архив логов

вот настройки postgres.conf
===========================
wal_level = archive
archive_mode = on            
archive_command = 'test ! -f /bkp/logs/%f && cp %p /bkp/logs/%f'
archive_timeout = 60  


в тестовой бд - удаляю запись

/bkp/logs/
==========
Jul 12 21:52 0000000D000000000000002D
Jul 13 09:40 0000000D000000000000002E


в recovery.conf хочу вернуться на 12 21:52, когда запись ещё была

restore_command = 'cp /bkp/logs/%f %p'
recovery_target_time = '2020-07-12 21:52:00'



в итоге recovery.conf переименовался recovery.done, но восстановление на то время не случилось, т.е. удалённая запись не восстановилась
13 июл 20, 09:15    [22166239]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1122
parallax113,

какой basebackup использовали для восстановления?
Ну и смотрите в лог.
13 июл 20, 10:28    [22166275]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
Melkij
parallax113,

какой basebackup использовали для восстановления?
Ну и смотрите в лог.

pg_basebackup не делаю, просто редактирую recovery.conf чтобы вернуться на состояние вчера

< 2020-07-13 11:59:42.904 +04 >СООБЩЕНИЕ:  получен запрос на быстрое выключение
< 2020-07-13 11:59:42.904 +04 >СООБЩЕНИЕ:  прерывание всех активных транзакций
< 2020-07-13 11:59:42.907 +04 >СООБЩЕНИЕ:  фоновый процесс "logical replication launcher" (PID 18317) завершился с кодом выхода 1
< 2020-07-13 11:59:42.908 +04 >СООБЩЕНИЕ:  выключение
< 2020-07-13 11:59:42.979 +04 >СООБЩЕНИЕ:  система БД выключена
< 2020-07-13 12:00:29.751 +04 >СООБЩЕНИЕ:  система БД была выключена: 2020-07-13 11:59:42 +04
< 2020-07-13 12:00:29.752 +04 >СООБЩЕНИЕ:  начинается восстановление точки во времени до 2020-07-12 21:52:00+04
< 2020-07-13 12:00:29.756 +04 >СООБЩЕНИЕ:  файл журнала "0000000E.history" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000E0000000000000032»: Нет такого файла или каталога
< 2020-07-13 12:00:29.761 +04 >СООБЩЕНИЕ:  согласованное состояние восстановления достигнуто по смещению 0/32000098
< 2020-07-13 12:00:29.761 +04 >СООБЩЕНИЕ:  неверная длина записи по смещению 0/32000098: ожидалось 24, получено 0
< 2020-07-13 12:00:29.761 +04 >СООБЩЕНИЕ:  данные REDO не требуются
< 2020-07-13 12:00:29.762 +04 >СООБЩЕНИЕ:  система БД готова к подключениям в режиме "только чтение"
cp: не удалось выполнить stat для «/bkp/logs/0000000E0000000000000032»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000F.history»: Нет такого файла или каталога
< 2020-07-13 12:00:29.771 +04 >СООБЩЕНИЕ:  выбранный ID новой линии времени: 15
< 2020-07-13 12:00:29.799 +04 >СООБЩЕНИЕ:  восстановление архива завершено
< 2020-07-13 12:00:29.804 +04 >СООБЩЕНИЕ:  файл журнала "0000000E.history" восстановлен из архива
< 2020-07-13 12:00:29.908 +04 >СООБЩЕНИЕ:  система БД готова принимать подключения


вот содержимое /bkp/logs:
Jul 12 21:47 0000000D000000000000002C.00000028.backup
Jul 12 21:52 0000000D000000000000002D
Jul 13 09:40 0000000D000000000000002E
Jul 13 09:43 0000000D000000000000002F
Jul 13 09:44 0000000D0000000000000030
Jul 13 09:45 0000000D0000000000000031.partial
Jul 10 19:31 0000000D.history
Jul 13 11:59 0000000E0000000000000031
Jul 13 12:00 0000000E0000000000000032.partial
Jul 13 09:45 0000000E.history
Jul 13 12:00 0000000F.history


зачем идёт обращение к 0000000E0000000000000032, если лог который указывает на время это 0000000D000000000000002D ?

или что-то не работает или я чего-то не понимаю
13 июл 20, 11:12    [22166311]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
mefman
Member

Откуда:
Сообщений: 3062
parallax113
Melkij
parallax113,

какой basebackup использовали для восстановления?
Ну и смотрите в лог.

pg_basebackup не делаю, просто редактирую recovery.conf чтобы вернуться на состояние вчера
или что-то не работает или я чего-то не понимаю

Это так не работает.
Восстановиться "взад" без бекапа невозможно.
Вчерашний бекап + все архивлоги до текущего момента = возможность восстановиться с точки бекапа на любой точку до текущего момента.
13 июл 20, 11:28    [22166320]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
подсовываю во такой backup_label :
START WAL LOCATION: 0/24000028 (file 000000060000000000000024)
CHECKPOINT LOCATION: 0/24000098
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2020-07-10 17:20:43 +04
LABEL: pg_basebackup test backup
START TIMELINE: 6


< 2020-07-13 12:19:17.627 +04 >СООБЩЕНИЕ:  файл журнала "000000060000000000000024" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/00000006.history»: Нет такого файла или каталога
< 2020-07-13 12:19:17.636 +04 >СООБЩЕНИЕ:  файл журнала "00000007.history" восстановлен из архива
< 2020-07-13 12:19:17.639 +04 >СООБЩЕНИЕ:  файл журнала "00000008.history" восстановлен из архива
< 2020-07-13 12:19:17.642 +04 >СООБЩЕНИЕ:  файл журнала "00000009.history" восстановлен из архива
< 2020-07-13 12:19:17.646 +04 >СООБЩЕНИЕ:  файл журнала "0000000A.history" восстановлен из архива
< 2020-07-13 12:19:17.649 +04 >СООБЩЕНИЕ:  файл журнала "0000000B.history" восстановлен из архива
< 2020-07-13 12:19:17.653 +04 >СООБЩЕНИЕ:  файл журнала "0000000C.history" восстановлен из архива
< 2020-07-13 12:19:17.658 +04 >СООБЩЕНИЕ:  файл журнала "0000000D.history" восстановлен из архива
< 2020-07-13 12:19:17.662 +04 >СООБЩЕНИЕ:  файл журнала "0000000E.history" восстановлен из архива
< 2020-07-13 12:19:17.664 +04 >СООБЩЕНИЕ:  запись REDO начинается со смещения 0/24000028
< 2020-07-13 12:19:17.664 +04 >СООБЩЕНИЕ:  согласованное состояние восстановления достигнуто по смещению 0/24000130
< 2020-07-13 12:19:17.665 +04 >СООБЩЕНИЕ:  система БД готова к подключениям в режиме "только чтение"
cp: не удалось выполнить stat для «/bkp/logs/0000000F0000000000000025»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E0000000000000025»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000D0000000000000025»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000C0000000000000025»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000B0000000000000025»: Нет такого файла или каталога
< 2020-07-13 12:19:17.709 +04 >СООБЩЕНИЕ:  файл журнала "000000060000000000000025" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F0000000000000026»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E0000000000000026»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000D0000000000000026»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000C0000000000000026»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000B0000000000000026»: Нет такого файла или каталога
< 2020-07-13 12:19:17.753 +04 >СООБЩЕНИЕ:  файл журнала "000000060000000000000026" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F0000000000000027»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E0000000000000027»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000D0000000000000027»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000C0000000000000027»: Нет такого файла или каталога
< 2020-07-13 12:19:17.794 +04 >СООБЩЕНИЕ:  файл журнала "0000000B0000000000000027" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F0000000000000028»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E0000000000000028»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000D0000000000000028»: Нет такого файла или каталога
< 2020-07-13 12:19:17.829 +04 >СООБЩЕНИЕ:  файл журнала "0000000C0000000000000028" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F0000000000000029»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E0000000000000029»: Нет такого файла или каталога
< 2020-07-13 12:19:17.871 +04 >СООБЩЕНИЕ:  файл журнала "0000000D0000000000000029" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F000000000000002A»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E000000000000002A»: Нет такого файла или каталога
< 2020-07-13 12:19:17.914 +04 >СООБЩЕНИЕ:  файл журнала "0000000D000000000000002A" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F000000000000002B»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E000000000000002B»: Нет такого файла или каталога
< 2020-07-13 12:19:17.951 +04 >СООБЩЕНИЕ:  файл журнала "0000000D000000000000002B" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F000000000000002C»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E000000000000002C»: Нет такого файла или каталога
< 2020-07-13 12:19:17.988 +04 >СООБЩЕНИЕ:  файл журнала "0000000D000000000000002C" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F000000000000002D»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E000000000000002D»: Нет такого файла или каталога
< 2020-07-13 12:19:18.028 +04 >СООБЩЕНИЕ:  файл журнала "0000000D000000000000002D" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F000000000000002E»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E000000000000002E»: Нет такого файла или каталога
< 2020-07-13 12:19:18.061 +04 >СООБЩЕНИЕ:  файл журнала "0000000D000000000000002E" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F000000000000002F»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E000000000000002F»: Нет такого файла или каталога
< 2020-07-13 12:19:18.094 +04 >СООБЩЕНИЕ:  файл журнала "0000000D000000000000002F" восстановлен из архива
cp: не удалось выполнить stat для «/bkp/logs/0000000F0000000000000030»: Нет такого файла или каталога
cp: не удалось выполнить stat для «/bkp/logs/0000000E0000000000000030»: Нет такого файла или каталога
< 2020-07-13 12:19:18.130 +04 >СООБЩЕНИЕ:  файл журнала "0000000D0000000000000030" восстановлен из архива
< 2020-07-13 12:19:18.131 +04 >СООБЩЕНИЕ:  восстановление останавливается перед фиксированием транзакции 6345, время 2020-07-13 09:44:00.228874+04
< 2020-07-13 12:19:18.131 +04 >СООБЩЕНИЕ:  восстановление приостановлено
< 2020-07-13 12:19:18.131 +04 >ПОДСКАЗКА:  Выполните pg_wal_replay_resume() для продолжения.


вот полный /bkp/logs
Jul 10 17:20 000000060000000000000023
Jul 10 17:20 000000060000000000000024
Jul 10 17:20 000000060000000000000024.00000028.backup
Jul 10 17:22 000000060000000000000025
Jul 10 17:22 000000060000000000000026
Jul 10 17:28 000000070000000000000027
Jul 10 17:27 00000007.history
Jul 10 17:33 00000008.history
Jul 10 19:23 000000090000000000000027
Jul 10 19:23 000000090000000000000028
Jul 10 19:22 00000009.history
Jul 10 19:25 0000000A0000000000000027
Jul 10 19:24 0000000A.history
Jul 10 19:28 0000000B0000000000000027
Jul 10 19:25 0000000B.history
Jul 10 19:30 0000000C0000000000000028
Jul 10 19:30 0000000C.history
Jul 10 19:41 0000000D0000000000000029
Jul 12 12:49 0000000D000000000000002A
Jul 12 21:47 0000000D000000000000002B
Jul 12 21:47 0000000D000000000000002C
Jul 12 21:47 0000000D000000000000002C.00000028.backup
Jul 12 21:52 0000000D000000000000002D
Jul 13 09:40 0000000D000000000000002E
Jul 13 09:43 0000000D000000000000002F
Jul 13 09:44 0000000D0000000000000030
Jul 13 09:45 0000000D0000000000000031.partial
Jul 10 19:31 0000000D.history
Jul 13 11:59 0000000E0000000000000031
Jul 13 12:00 0000000E0000000000000032.partial
Jul 13 09:45 0000000E.history
Jul 13 12:14 0000000F0000000000000032
Jul 13 12:00 0000000F.history
13 июл 20, 11:28    [22166322]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
mefman
parallax113
пропущено...

pg_basebackup не делаю, просто редактирую recovery.conf чтобы вернуться на состояние вчера
или что-то не работает или я чего-то не понимаю

Это так не работает.
Восстановиться "взад" без бекапа невозможно.
Вчерашний бекап + все архивлоги до текущего момента = возможность восстановиться с точки бекапа на любой точку до текущего момента.


т.е. разворачиваю базовую копию и выставляю нужное время в recovery.conf?
спасибо, я понял
13 июл 20, 11:34    [22166329]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
mefman
Member

Откуда:
Сообщений: 3062
parallax113
mefman
пропущено...

Это так не работает.
Восстановиться "взад" без бекапа невозможно.
Вчерашний бекап + все архивлоги до текущего момента = возможность восстановиться с точки бекапа на любой точку до текущего момента.


т.е. разворачиваю базовую копию и выставляю нужное время в recovery.conf?

да. так.
13 июл 20, 12:05    [22166367]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
такой ещё вопрос:
есть такие архивные копии логов

000000130000000000000027
000000130000000000000028
000000130000000000000029
000000130000000000000029.00000028.backup
00000013000000000000002A
00000013000000000000002B
00000013000000000000002C


здесь я могу восстановиться только с позиции не позднее 130000000000000029.00000028.backup,
т.е. в recovery нужно указывать 13000000000000002A, 13000000000000002B или 13000000000000002С ?
13 июл 20, 12:57    [22166419]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
mefman
Member

Откуда:
Сообщений: 3062
parallax113

т.е. в recovery нужно указывать 13000000000000002A, 13000000000000002B или 13000000000000002С ?

не понял. что значит указывать?
recovery_target_time - время выставите.
Выставлять время - рекомендованный вариант в ПЖ. В отличии от оракла, где рекомендуется целью восстановления ставить scn
13 июл 20, 14:15    [22166519]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
mefman
parallax113

т.е. в recovery нужно указывать 13000000000000002A, 13000000000000002B или 13000000000000002С ?

не понял. что значит указывать?
recovery_target_time - время выставите.
Выставлять время - рекомендованный вариант в ПЖ. В отличии от оракла, где рекомендуется целью восстановления ставить scn

имею ввиду, что например не получиться сделать восстановление позже START TIME: 2020-07-13 13:46:23 +04, которое указано в backup_label базового архива, даже если после этого времени был сброс логов в архив(archive_command)
получается нужно опять делать базовый архив(pg_basebackup) и восстанавливаться уже от него?

правильно понимаю?
13 июл 20, 17:03    [22166698]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4233
parallax113
mefman
пропущено...

не понял. что значит указывать?
recovery_target_time - время выставите.
Выставлять время - рекомендованный вариант в ПЖ. В отличии от оракла, где рекомендуется целью восстановления ставить scn

имею ввиду, что например не получиться сделать восстановление позже START TIME: 2020-07-13 13:46:23 +04, которое указано в backup_label базового архива, даже если после этого времени был сброс логов в архив(archive_command)
получается нужно опять делать базовый архив(pg_basebackup) и восстанавливаться уже от него?

правильно понимаю?


Не получится сделать восстановления на РАНЬШЕ ЧЕМ 'START TIME: 2020-07-13 13:46:23 +04, которое указано в backup_label';
13 июл 20, 17:10    [22166703]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1122
parallax113,

Кажется есть проблема в понимании происходящего при восстановлении по WAL - это не undo, где мы берём базу и отменяет изменения. Это наоборот redo, где мы берём достаточно старый basebackup и к нему применяем все wal до интересующей точки восстановления.
13 июл 20, 17:24    [22166709]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
Melkij
parallax113,

Кажется есть проблема в понимании происходящего при восстановлении по WAL

это точно

правильно понимаю, что когда я сделал базовый архив, восстановиться я смогу только на него, т.е. на последнюю запечатлённую им транзакцию, но не раньше, плюс на все последующие логи которые будут копиться в течении дня?

Maxim Boguk

Не получится сделать восстановления на РАНЬШЕ ЧЕМ 'START TIME: 2020-07-13 13:46:23 +04, которое указано в backup_label';



смотрите:

1. в 09:07 внёс запись№1 в бд
2. сделал pg_switch_log()
3. сделал pg_basebackup -D /backup/file_backup --wal-method=none -F t -z -U postgres -w -c fast -l "test backup"
4. в 10:20 внёс запись№2
5. сделал pg_switch_log()

пробую восстановиться с базового бекапа.
1. в recovery.conf казываю время 9:30 и восстанвливается только запись№1, но мне предложили ещё сделать pg_wal_replay_resume()
(тут как я понял не важно какое время указываю, данные восстановятся последние на момент бекапа)
2. второй раз восстанавливаюсь и в recovery.conf пишу время 10:30, восстанавливаются записи№1 и №2

в 11:05 в базу вношу ещё запись№3, делаю pg_switch_log()
опять восстанавливаюсь с базового архива на время 11:20, но запись№3 не восстанавливается

что я делаю не так? по идее то она должна была восстановиться

Сообщение было отредактировано: 14 июл 20, 10:40
14 июл 20, 10:41    [22167001]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
mefman
Member

Откуда:
Сообщений: 3062
parallax113

что я делаю не так?

Таки что-то делаешь не так.
Поскольку вероятность нарушения принципа долговечности единожды зафиксированной транзакции в СУБД стремится к 0.
14 июл 20, 11:28    [22167024]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
mefman
parallax113

что я делаю не так?

Таки что-то делаешь не так.
Поскольку вероятность нарушения принципа долговечности единожды зафиксированной транзакции в СУБД стремится к 0.


мне не понятно как это работает:
сегодня утром добавил запись, переключил сегмент(switch_wal)
вoсстановился с timeline = "latest" - всё хорошо

далее создал индекс внёс ещё данные и повторно восстановился на latest, но восстановились данные за вчера
в логе пишет что последняя транзакция была вчера

это или я чего-то не понимаю или что-то не правильно работает
может ли 1С-совский 11-ый постгрес фокусы такие делать ?

ещё при восстановлении в pg_log пишет, что не может найти какие-то файлы history и ещё какие-то, хотя они вроде есть

Сообщение было отредактировано: 15 июл 20, 09:59
15 июл 20, 09:53    [22167567]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4233
parallax113
mefman
пропущено...

Таки что-то делаешь не так.
Поскольку вероятность нарушения принципа долговечности единожды зафиксированной транзакции в СУБД стремится к 0.


мне не понятно как это работает:
сегодня утром добавил запись, переключил сегмент(switch_wal)
вoсстановился с timeline = "latest" - всё хорошо

далее создал индекс внёс ещё данные и повторно восстановился на latest, но восстановились данные за вчера
в логе пишет что последняя транзакция была вчера

это или я чего-то не понимаю или что-то не правильно работает
может ли 1С-совский 11-ый постгрес фокусы такие делать ?

ещё при восстановлении в pg_log пишет, что не может найти какие-то файлы history и ещё какие-то, хотя они вроде есть


Поскольку вы ни команды которыми все делали ни recovery.conf не показали в полной последовательности - вам помочь не реально.
Основной вопрос а что значит 'и повторно восстановился на latest' - какая именно была процедура?
скорее всего именно там у вас косяк какой то
15 июл 20, 10:06    [22167576]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
Maxim Boguk


Поскольку вы ни команды которыми все делали ни recovery.conf не показали в полной последовательности - вам помочь не реально.
Основной вопрос а что значит 'и повторно восстановился на latest' - какая именно была процедура?
скорее всего именно там у вас косяк какой то


postgresql.conf
wal_level = archive
archive_mode = on
archive_command = 'test ! -f /backup/logs/%f && cp %p /backupl/logs/%f'


предварительно бекап сделал такой коммандой:
pg_basebackup -D /backup/file_backup --port=5432 --wal-method=none -F t -z -U postgres -w -c fast -l "test backup"

backup.lable
+
START WAL LOCATION: 0/5000028 (file 000000010000000000000005)
CHECKPOINT LOCATION: 0/5000060
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2020-07-15 11:22:12 +04
LABEL: test backup
START TIMELINE: 1



$ ll /backup/logs/
+
total 262184
Jul 15 11:19 000000010000000000000003
Jul 15 11:22 000000010000000000000004
Jul 15 11:22 000000010000000000000005
Jul 15 11:22 000000010000000000000005.00000028.backup
Jul 15 11:28 000000010000000000000006
Jul 15 11:49 000000010000000000000007
Jul 15 12:01 000000020000000000000008
Jul 15 11:50 00000002.history
Jul 15 12:08 000000030000000000000009
Jul 15 12:07 00000003.history
Jul 15 12:14 000000040000000000000006
Jul 15 12:13 00000004.history
Jul 15 12:16 000000050000000000000007
Jul 15 12:15 00000005.history
Jul 15 12:32 000000060000000000000008
Jul 15 12:34 000000060000000000000009
Jul 15 12:18 00000006.history
Jul 15 12:38 000000070000000000000008
Jul 15 12:38 00000007.history
Jul 15 12:40 000000080000000000000008
Jul 15 12:40 000000080000000000000009
Jul 15 12:39 00000008.history
Jul 15 12:43 000000090000000000000008
Jul 15 12:43 000000090000000000000009
Jul 15 12:41 00000009.history
Jul 15 12:44 0000000A.history


добавляю запись в таблицу
$ psql
psql (11.5)
Type "help" for help.

posts=# select * from t;
 id | post
----+-------
  1 | 11:04
  2 | 11:16
  3 | 11:28
(3 rows)

posts=# insert into t values ('4', '12:48');
INSERT 0 1
posts=# select * from t;
 id | post
----+-------
  1 | 11:04
  2 | 11:16
  3 | 11:28
  4 | 12:48
(4 rows)


смотрю текущий лог:

posts=# SELECT pg_walfile_name(pg_current_wal_lsn());
     pg_walfile_name
--------------------------
 0000000A0000000000000008
(1 row)


сбрасываю его в архив:

posts=# SELECT pg_switch_wal();
 pg_switch_wal
---------------
 0/8000248
(1 row)


текущий сменился

posts=# SELECT pg_walfile_name(pg_current_wal_lsn());
     pg_walfile_name
--------------------------
 0000000A0000000000000009
(1 row)


восстанавливаю на последнюю запись

останавливаю постгрес

$ systemctl stop postgresql-11


удаляю всё из каталога с бд
$ rm -f -r *


разворачиваю базовый архив
$ tar -xzf /backup/file_backup/base.tar.gz -C .


$ date
Wed Jul 15 12:54:26 +04 2020


создаю recovery
$ echo "restore_command = 'cp /backup/logs/%f %p'" > recovery.conf
$ echo "recovery_target_time = '2020-07-15 12:50:00'" >> recovery.conf


стартую постгрес
$ systemctl start postgresql-11


записи №4 в бд нет

postgres=# \c posts;
You are now connected to database "posts" as user "postgres".
posts=# select * from t;
 id | post
----+-------
  1 | 11:04
  2 | 11:16
  3 | 11:28
(3 rows)

posts=# SELECT pg_walfile_name(pg_current_wal_lsn());
     pg_walfile_name
--------------------------
 0000000B0000000000000008
(1 row)


pg_log/postgresql-Wed.log
+
< 2020-07-15 12:54:50.515 +04 >СООБЩЕНИЕ: работа системы БД была прервана; последний момент работы: 2020-07-15 11:22:12 +04
< 2020-07-15 12:54:50.584 +04 >СООБЩЕНИЕ: начинается восстановление точки во времени до 2020-07-15 12:50:00+04
< 2020-07-15 12:54:50.608 +04 >СООБЩЕНИЕ: файл журнала "000000010000000000000005" восстановлен из архива
< 2020-07-15 12:54:50.638 +04 >СООБЩЕНИЕ: запись REDO начинается со смещения 0/5000028
< 2020-07-15 12:54:50.640 +04 >СООБЩЕНИЕ: согласованное состояние восстановления достигнуто по смещению 0/5000130
< 2020-07-15 12:54:50.640 +04 >СООБЩЕНИЕ: система БД готова к подключениям в режиме "только чтение"
< 2020-07-15 12:54:50.663 +04 >СООБЩЕНИЕ: файл журнала "000000010000000000000006" восстановлен из архива
< 2020-07-15 12:54:50.711 +04 >СООБЩЕНИЕ: файл журнала "000000010000000000000007" восстановлен из архива
cp: не удалось выполнить stat для «/backup/logs/000000010000000000000008»: Нет такого файла или каталога
< 2020-07-15 12:54:50.740 +04 >СООБЩЕНИЕ: записи REDO обработаны до смещения 0/7000140
< 2020-07-15 12:54:50.741 +04 >СООБЩЕНИЕ: последняя завершённая транзакция была выполнена в 2020-07-15 11:28:22.52175+04
< 2020-07-15 12:54:50.767 +04 >СООБЩЕНИЕ: файл журнала "000000010000000000000007" восстановлен из архива
< 2020-07-15 12:54:50.802 +04 >СООБЩЕНИЕ: файл журнала "00000002.history" восстановлен из архива
< 2020-07-15 12:54:50.812 +04 >СООБЩЕНИЕ: файл журнала "00000003.history" восстановлен из архива
< 2020-07-15 12:54:50.817 +04 >СООБЩЕНИЕ: файл журнала "00000004.history" восстановлен из архива
< 2020-07-15 12:54:50.821 +04 >СООБЩЕНИЕ: файл журнала "00000005.history" восстановлен из архива
< 2020-07-15 12:54:50.825 +04 >СООБЩЕНИЕ: файл журнала "00000006.history" восстановлен из архива
< 2020-07-15 12:54:50.830 +04 >СООБЩЕНИЕ: файл журнала "00000007.history" восстановлен из архива
< 2020-07-15 12:54:50.835 +04 >СООБЩЕНИЕ: файл журнала "00000008.history" восстановлен из архива
< 2020-07-15 12:54:50.839 +04 >СООБЩЕНИЕ: файл журнала "00000009.history" восстановлен из архива
< 2020-07-15 12:54:50.852 +04 >СООБЩЕНИЕ: файл журнала "0000000A.history" восстановлен из архива
cp: не удалось выполнить stat для «/backup/logs/0000000B.history»: Нет такого файла или каталога
< 2020-07-15 12:54:50.857 +04 >СООБЩЕНИЕ: выбранный ID новой линии времени: 11
< 2020-07-15 12:54:50.913 +04 >СООБЩЕНИЕ: восстановление архива завершено
cp: не удалось выполнить stat для «/backup/logs/00000001.history»: Нет такого файла или каталога
< 2020-07-15 12:54:51.027 +04 >СООБЩЕНИЕ: система БД готова принимать подключения



$ ll /backup/logs/
+
total 294956
Jul 15 11:19 000000010000000000000003
Jul 15 11:22 000000010000000000000004
Jul 15 11:22 000000010000000000000005
Jul 15 11:22 000000010000000000000005.00000028.backup
Jul 15 11:28 000000010000000000000006
Jul 15 11:49 000000010000000000000007
Jul 15 12:01 000000020000000000000008
Jul 15 11:50 00000002.history
Jul 15 12:08 000000030000000000000009
Jul 15 12:07 00000003.history
Jul 15 12:14 000000040000000000000006
Jul 15 12:13 00000004.history
Jul 15 12:16 000000050000000000000007
Jul 15 12:15 00000005.history
Jul 15 12:32 000000060000000000000008
Jul 15 12:34 000000060000000000000009
Jul 15 12:18 00000006.history
Jul 15 12:38 000000070000000000000008
Jul 15 12:38 00000007.history
Jul 15 12:40 000000080000000000000008
Jul 15 12:40 000000080000000000000009
Jul 15 12:39 00000008.history
Jul 15 12:43 000000090000000000000008
Jul 15 12:43 000000090000000000000009
Jul 15 12:41 00000009.history
Jul 15 12:49 0000000A0000000000000008
Jul 15 12:50 0000000A0000000000000009
Jul 15 12:44 0000000A.history
Jul 15 12:54 0000000B.history
15 июл 20, 12:12    [22167685]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1122
parallax113
< 2020-07-15 12:54:50.663 +04 >СООБЩЕНИЕ: файл журнала "000000010000000000000006" восстановлен из архива
< 2020-07-15 12:54:50.711 +04 >СООБЩЕНИЕ: файл журнала "000000010000000000000007" восстановлен из архива
cp: не удалось выполнить stat для «/backup/logs/000000010000000000000008»: Нет такого файла или каталога

Внимание на запрошенный timeline. И как по листингу /backup/logs/ видно - всё верно, в этом тайлайне нет такого сегмента.
См. recovery_target_timeline
15 июл 20, 12:29    [22167708]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
parallax113
Member

Откуда:
Сообщений: 17
Melkij

Внимание на запрошенный timeline. И как по листингу /backup/logs/ видно - всё верно, в этом тайлайне нет такого сегмента.
См. recovery_target_timeline

а как тогда его восстановить?
если на момент записи был сегмент 0000000A0000000000000008, который попал в архив после смены pg_switch_wal()
почему идёт обращение к 000000010000000000000008 которого нет
15 июл 20, 13:32    [22167786]     Ответить | Цитировать Сообщить модератору
 Re: восстановление из логов  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1122
parallax113,

потому что recovery_target_timeline. При чтении документации убедитесь что читаете документацию к своей версии базы, в pg12 дефолтное поведение мы меняли.
15 июл 20, 13:42    [22167796]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить