8000 Восстановление на момент времени · Issue #355 · postgrespro/pg_probackup · GitHub
[go: up one dir, main page]

Skip to content

Восстановление на момент времени #355

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Luter opened this issue Apr 6, 2021 · 14 comments
Closed

Восстановление на момент времени #355

Luter opened this issue Apr 6, 2021 · 14 comments

Comments

@Luter
Copy link
Luter commented Apr 6, 2021

Добрый день!

Начинаю знакомиться с PostgreSQL, и дело дошло до бэкапов.
Выбрал вашу утилиту.
Интересует именно восстановление на момент времени(PITR).

Исходные данные:
Windows Server, PostgreSQL 13.1
pg_probackup 2.4.9

В файле postgresql.conf ставим:
archive_mode = on
archive_command = '"C:/pg_probackup/2.4.9/PostgreSQL13/pg_probackup.exe" archive-push -B C:/PostgreSQL_backup --instance local_db1 --wal-file-name=%f'

Что делаем:

  1. pg_probackup.exe init -B C:\PostgreSQL_backup

  2. pg_probackup add-instance --instance=local_db1 --pgdata=C:\PostgreSQL\13\data -B C:\PostgreSQL_backup

  3. Делаем FULL бэкап
    pg_probackup backup -B C:\PostgreSQL_backup --instance=local_db1 -j2 --backup-mode=FULL --compress --pguser=backup_user --pgdatabase=test --password

  4. Делаем DELTA бэкап
    pg_probackup backup -B C:\PostgreSQL_backup --instance=local_db1 -j2 --backup-mode=DELTA --compress --pguser=backup_user --pgdatabase=test --password

5)Смотрим бэкапы

pg_probackup show -B C:\PostgreSQL_backup
 BACKUP INSTANCE 'local_db1'
=======================================================================================================================================
 Instance   Version  ID      Recovery Time           Mode   WAL Mode  TLI  Time     Data   WAL  Zratio  Start LSN   Stop LSN    Status 
=======================================================================================================================================
 local_db1  13       QR4QK2  2021-04-06 09:40:58+03  DELTA  ARCHIVE   5/5    9s    121kB  16MB    1.06  0/64000028  0/650000B8  OK     
 local_db1  13       QR4QIK  2021-04-06 09:40:06+03  FULL   ARCHIVE   5/0   12s  10026kB  16MB    3.17  0/61000028  0/620000F0  OK 

Получается что у нас есть FULL, DELTA и WAL файлы, все это лежит в C:\PostgreSQL_backup.

Если я правильно понимаю, мы можем восстановиться на любое время с 2021-04-06 09:40:06+03 до 2021-04-06 09:40:58+03.

  1. Проверяем возможность восстановления
    pg_probackup validate -B C:\PostgreSQL_backup --instance local_db1 --recovery-target-time='2021-04-06 09:40:09+03'
    Получаем ошибку
    ERROR: Backup satisfying target options is not found.

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

@gsmolk
Copy link
Contributor
gsmolk commented Apr 6, 2021

Добрый день!

Если я правильно понимаю, мы можем восстановиться на любое время с 2021-04-06 09:40:06+03 до 2021-04-06 09:40:58+03.

Не совсем верно, Вы можете восстановиться от 2021-04-06 09:40:06+03 и докуда хватит WAL в архиве.

ERROR: Backup satisfying target options is not found.

Хм, странно. Пришлите, пожалуйста, выхлоп от следующей команды:

pg_probackup show -B C:\PostgreSQL_backup --instance local_db1 --format=json -i QR4QIK

@Luter
Copy link
Author
Luter commented Apr 6, 2021
pg_probackup show -B C:\PostgreSQL_backup --instance local_db1 --format=json -i QR4QIK
[
    {
        "instance": "local_db1",
        "backups": [
            {
                "id": "QR4QIK",
                "backup-mode": "FULL",
                "wal": "ARCHIVE",
                "compress-alg": "zlib",
                "compress-level": 1,
                "from-replica": "false",
                "block-size": 8192,
                "xlog-block-size": 8192,
                "checksum-version": 0,
                "program-version": "2.4.9",
                "server-version": "13",
                "current-tli": 5,
                "parent-tli": 0,
                "start-lsn": "0/61000028",
                "stop-lsn": "0/620000F0",
                "start-time": "2021-04-06 09:39:56+03",
                "end-time": "2021-04-06 09:40:08+03",
                "recovery-xid": 506,
                "recovery-time": "2021-04-06 09:40:06+03",
                "data-bytes": 10266812,
                "wal-bytes": 16777216,
                "uncompressed-bytes": 32498410,
                "pgdata-bytes": 32498169,
                "primary_conninfo": "user=backup_user channel_binding=prefer port=5432 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any",
                "status": "OK",
                "content-crc": 1919819428
            }
        ]
    }
]

@gsmolk
Copy link
Contributor
gsmolk commented Apr 10, 2021

Хм, не получается воспроизвести:

===================================================================================================================================
 Instance  Version  ID      Recovery Time           Mode   WAL Mode  TLI    Time  Data   WAL  Zratio  Start LSN  Stop LSN   Status
===================================================================================================================================
 node      11       QRCSC4  2021-04-10 18:00:45+03  FULL   ARCHIVE   5/0  1m:22s  22MB  16MB    1.00  0/2000028  0/30001D0  OK

Проверяем, что можно восстановиться на recovery-time + 1 секунда:

pg_probackup validate -B /backup --instance=node --recovery-target-time='2021-04-10 18:00:46+03'
INFO: Validating backup QRCSC4
INFO: Backup QRCSC4 data files are valid
INFO: Backup validation completed successfully on time 2021-04-10 18:01:04+03, xid 569 and LSN 0/400C558
INFO: Backup QRCSC4 is valid.
INFO: Validate of backup QRCSC4 completed.

Попробуйте обновиться на 2.4.10 и попробовать еще раз.

@Luter
Copy link
Author
Luter commented Apr 12, 2021

Можно Вас попросить собрать дистрибутив 2.4.10 для PostgreSQL 13 на Windows?

@gsmolk
Copy link
Contributor
gsmolk commented Apr 12, 2021

Прошу прощения, совсем забыл, что 2.4.10 для Windows не релизился.
Да, соберу

@gsmolk
Copy link
Contributor
gsmolk commented Apr 12, 2021

А такой вариант работает?

pg_probackup validate -B C:\PostgreSQL_backup --instance local_db1 -QR4QIK  --recovery-target-time='2021-04-06 09:40:09+03'

@Luter
Copy link
Author
Luter commented Apr 12, 2021

Я пересоздал базу и сделал новый бэкап:

C:\pg_probackup\2.4.9\PostgreSQL13>pg_probackup show -B C:\PostgreSQL_backup

BACKUP INSTANCE 'local_db1'
====================================================================================================================================
 Instance   Version  ID      Recovery Time           Mode  WAL Mode  TLI  Time     Data   WAL  Zratio  Start LSN  Stop LSN   Status
====================================================================================================================================
 local_db1  13       QRG6MH  2021-04-12 14:01:40+03  FULL  ARCHIVE   1/0   14s  10017kB  16MB    3.17  0/3000060  0/40000B8  OK

Тогда, если я все правильно понял, Ваша команда должна тогда выглядеть так:
pg_probackup validate -B C:\PostgreSQL_backup --instance local_db1 -i QRG6MH --recovery-target-time='2021-04-12 14:01:41+03'
ERROR: Requested backup QRG6MH does not satisfy restore options

@gsmolk
Copy link
Contributor
gsmolk commented Apr 15, 2021

бинарь 2.4.14 для 13 версии
https://oc.postgrespro.ru/index.php/s/D1Li2twgj4zpX9h

@Luter
Copy link
Author
Luter commented Apr 16, 2021

Обновил до версии 2.4.14

C:\pg_probackup\2.4.14\PostgreSQL13>pg_probackup show -B C:\PostgreSQL_backup --instance local_db1
====================================================================================================================================
 Instance   Version  ID      Recovery Time           Mode  WAL Mode  TLI  Time     Data   WAL  Zratio  Start LSN  Stop LSN   Status
====================================================================================================================================
 local_db1  13       QRG6MH  2021-04-12 14:01:40+03  FULL  ARCHIVE   1/0   14s  10017kB  16MB    3.17  0/3000060  0/40000B8  OK

Ошибка осталась:

C:\pg_probackup\2.4.14\PostgreSQL13>pg_probackup validate -B C:\PostgreSQL_backup --instance local_db1 -i QRG6MH --recovery-target-time='2021-04-12 14:01:41+03'
ERROR: Requested backup QRG6MH does not satisfy restore options

C:\pg_probackup\2.4.14\PostgreSQL13>pg_probackup validate -B C:\PostgreSQL_backup --instance local_db1 --recovery-target-time='2021-04-12 14:01:41+03'
ERROR: Backup satisfying target options is not found.

Может я что-то не настроил?

pg_probackup.conf

# Backup instance information
pgdata = C:/pgdata
system-identifier = 6950174131668410192
xlog-seg-size = 16777216
postgresql.conf

# - Settings -
wal_level = logical		
max_wal_size = 1GB
min_wal_size = 80MB

# - Archiving -
archive_mode = on		
archive_command = '"C:/pg_probackup/2.4.9/PostgreSQL13/pg_probackup.exe" archive-push -B C:/PostgreSQL_backup --instance local_db1 --wal-file-name=%f'		

@gsmolk
Copy link
Contributor
gsmolk commented Apr 16, 2021

Попробуйте использовать двойные кавычки в recovery-target-time

@Luter
Copy link
Author
Luter commented Apr 16, 2021

Да, Вы правы! Двойные кавычки спасают ситуацию :)

Я правильно понимаю, что после выполнения этой команды у меня будет база на состояние 2021-04-12 14:01:41+03 и больше никаких дополнительных действий не надо?

C:\pg_probackup\2.4.14\PostgreSQL13>pg_probackup restore -B C:\PostgreSQL_backup --instance local_db1 --recovery-target-time="2021-04-12 14:01:41+03"
INFO: Validating backup QRG6MH
INFO: Backup QRG6MH data files are valid
INFO: Backup validation completed successfully on time 2021-04-12 14:02:32+03, xid 492 and LSN 0/5000150
INFO: Backup QRG6MH is valid.
INFO: Restoring the database from backup at 2021-04-12 14:01:29+03
INFO: Start restoring backup files. PGDATA size: 31MB
INFO: Backup files are restored. Transfered bytes: 31MB, time elapsed: 4s
INFO: Restore incremental ratio (less is better): 100% (31MB/31MB)
INFO: Syncing restored files to disk
INFO: Restored backup files are synced, time elapsed: 1s
INFO: Restore of backup QRG6MH completed.

@gsmolk
Copy link
Contributor
gsmolk commented Apr 16, 2021

Да, Вы правы! Двойные кавычки спасают ситуацию :)

Надо в доке все примеры поправить на двойные кавычки

Я правильно понимаю, что после выполнения этой команды у меня будет база на состояние 2021-04-12 14:01:41+03

Не совсем, у вас после выполнения этой команды есть:

  1. Гарантия, что на эту точку вообще в принципе можно восстановиться (благодаря валидации, которая происходит перед восстановлением - INFO: Backup validation completed successfully on time 2021-04-12 14:02:32+03, xid 492 and LSN 0/5000150)
  2. Восстановлен бэкап и все нужные параметры для восстановления на требуемую точку во времени прописаны в конфигах.

Вам теперь нужно запустить постгрес, который и будет выполнять накат WAL до требуемой точки. На этой стадии тоже возможны какие-либо осложнения.

@Luter
Copy link
Author
Luter commented Apr 16, 2021

Спасибо за помощь!

gsmolk added a commit that referenced this issue Apr 23, 2021
@gsmolk
Copy link
Contributor
gsmolk commented Apr 23, 2021

Обновил кавычки в доке.

@gsmolk gsmolk closed this as completed Apr 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants
0