Blog

Blog

Restaurer avec pgBackRest

C'est très bien de savoir faire une sauvegarde avec pgBackRest, mais encore faut-il savoir restaurer cette sauvegarde.

Restaure en mode delta

Ce mode très pratique permet à pgBackRest de comparer et ne restaurer que les fichiers pour lesquels c'est vraiment nécessaire.
sudo -u postgres pgbackrest --stanza=main --delta --log-level-console=detail restore
2017-02-21 09:58:59.528 P00   INFO: restore command begin 1.15: --db-path=/var/lib/postgresql/9.6/main --delta --log-level-console=detail --repo-path=/var/lib/pgbackrest --stanza=main
2017-02-21 09:58:59.568 P00   INFO: restore backup set 20170217-145055F_20170221-095547D
2017-02-21 09:58:59.725 P00 DETAIL: check /var/lib/postgresql/9.6/main exists
2017-02-21 09:58:59.802 P00   INFO: remove invalid files/paths/links from /var/lib/postgresql/9.6/main
2017-02-21 09:58:59.877 P00 DETAIL: remove file /var/lib/postgresql/9.6/main/recovery.done
2017-02-21 09:58:59.877 P00 DETAIL: remove file /var/lib/postgresql/9.6/main/postmaster.opts
2017-02-21 09:58:59.878 P00 DETAIL: remove file /var/lib/postgresql/9.6/main/pg_xlog/archive_status/00000006000000000000006B.done
...
2017-02-21 09:58:59.927 P00   INFO: cleanup removed 17 files, 1 path
2017-02-21 09:59:00.622 P01 DETAIL: restore file /var/lib/postgresql/9.6/main/base/16385/16405 - exists and matches backup (153.4MB, 33%) checksum ceb4e6230607e7973927ed3e8528671551ad8a3b
2017-02-21 09:59:00.830 P01 DETAIL: restore file /var/lib/postgresql/9.6/main/base/16385/16420 - exists and matches backup (85.6MB, 52%) checksum 6c5fe798c54ae1922f141a43e62cd325abf74458
...
2017-02-21 09:59:01.676 P01   INFO: restore file /var/lib/postgresql/9.6/main/base/12448/3609 (32KB, 97%) checksum 45ac781f938a83b267cf360f927f400fb87fc080
2017-02-21 09:59:01.681 P01   INFO: restore file /var/lib/postgresql/9.6/main/base/12448/3455 (32KB, 97%) checksum f5a1bc35de91152a60934d394512454b1f5545cc
2017-02-21 09:59:01.685 P01   INFO: restore file /var/lib/postgresql/9.6/main/base/12448/2757 (32KB, 97%) checksum 7b8f27284382bc310e32cb8e9f4b62c698931f51
...
2017-02-21 09:59:04.858 P00   INFO: write /var/lib/postgresql/9.6/main/recovery.conf
2017-02-21 09:59:04.956 P00   INFO: restore global/pg_control (copied last to ensure aborted restores cannot be started)
2017-02-21 09:59:04.960 P00   INFO: restore command end: completed successfully 

Faire une restauration complète

Si on souhaite faire une restauration complète, il faut que le répertoire $PGDATA n'existe pas.
sudo -u postgres pgbackrest --stanza=main  --log-level-console=detail restore2017-02-21 10:17:58.702 P00   INFO: restore command begin 1.15: --db-path=/var/lib/postgresql/9.6/main --log-level-console=detail --repo-path=/var/lib/pgbackrest --stanza=main
2017-02-21 10:17:58.742 P00   INFO: restore backup set 20170217-145055F_20170221-095547D
2017-02-21 10:17:58.894 P00 DETAIL: check /var/lib/postgresql/9.6/main exists
2017-02-21 10:18:00.578 P01   INFO: restore file /var/lib/postgresql/9.6/main/base/16385/16405 (153.4MB, 33%) checksum ceb4e6230607e7973927ed3e8528671551ad8a3b
...
2017-02-21 10:18:10.571 P00   INFO: write /var/lib/postgresql/9.6/main/recovery.conf
2017-02-21 10:18:10.670 P00   INFO: restore global/pg_control (copied last to ensure aborted restores cannot be started)
2017-02-21 10:18:10.675 P00   INFO: restore command end: completed successfully 
Il faudra peut-être remettre postgres:postgres comme propriétaire de $PGDATA avec des droits 700... Et ça redémarre!

Faire du PITR

Pour faire du PITR (Point In Time Recovery), il suffit de modifier le fichier recovery.conf. PgBackRest propose de le faire pour vous
sudo -u postgres pgbackrest --stanza=main --delta --type=time "--target=2017-02-20 11:20:00" restore
sudo -u postgres cat /var/lib/postgresql/9.6/main/recovery.conf
restore_command = '/usr/bin/pgbackrest --stanza=main archive-get %f "%p"'
recovery_target_time = '2017-02-20 11:20:00'
sudo pg_ctlcluster 9.6 main start
Redirecting start request to systemctl

Pour en savoir plus

Toute la documentation est disponible sur le site de pgBackRest.