Formation DBA5
Dalibo SCOP
8 janvier 2018
Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :
Paternité
Pas d'utilisation commerciale
Partage des conditions initiales Ă l'identique
RPO
(Recovery Point Objective)
RTO
(Recovery Time Objective)
pg_dump
extrait le contenu d'une base en texte (SQL) ou binairepg_dumpall
extrait une instance en totalité au format textepsql
exécute le SQL des dumps au format textepg_restore
restaure un dump binaire dans une baseFormat | Dump | Restore |
---|---|---|
plain (ou SQL) |
|
|
tar |
|
|
custom |
|
|
directory |
|
|
plain
(SQL)directory
(9.3+)pg_dumpall
pg_dumpall
=> il faut combiner pg_dump
et pg_dumpall
pour avoir la sauvegarde la plus flexible.
FSM
et VM
des tables Ă la restauration-h
/ $PGHOST
/ socket Unix-p
/ $PGPORT
/ 5432-U
/ $PGUSER
/ utilisateur du système-d
/ $PGDATABASE
/ utilisateur de connexion$PGPASSWORD
.pgpass
pg_hba.conf
-d
ou en fin de commande-F
(p
, t
, c
, d
)-f
chemin, sortie standard sinon-a
, -s
, -n
, -N
, -t
, -T
, -O
, -x
, --section
-Z 0-9
directory
, 9.3+) : -j
jobs-g
-r
-t
-a
, -s
, -O
, -x
plain
)-f
permet de spécifier l'emplacement du fichier dump-1
permet d'exécuter la restauration en une transaction
-v ON_ERROR_ROLLBACK=ON
: faire un rollback en cas d'erreur et continuer la restauration-v ON_ERROR_STOP=ON
: arrêter l'exécution à la première erreur (rollback complet)-f
indique un fichier de sortie
-F
(t
, c
, d
), détecté automatiquement-a
, -I
, -n
, -O
, -P
, -s
, -t
, -T
, -x
, --section
-1
-d
indique la base de données de connexion-C
(créer la base de données cible)
pg_restore
se connecte (-d
) et exécute CREATE DATABASE
pg_restore
se connecte à la nouvelle base et exécute le SQL-C
-d
) et exécute le SQL-d
pg_restore
affiche le SQL (permet de débugger)-l
-L liste.txt
recovery
recovery
permet le PITRpostgresql.conf
:
wal_level
: replica
ou logical
archive_mode
: on
ou always
archive_command
: texte de la commandearchive_timeout
: temps en secondeswal_level
et archive_mode
ont changé, recharger sinonSELECT pg_start_backup('label', true);
SELECT pg_stop_backup();
$PGDATA/pg_tblspc
si nécessaire)$PGDATA/pg_wal
(on restaurera les WAL archivés)postmaster.pid
et postmaster.opts
$PGDATA/recovery.conf
:
restore_command
recovery_target_*
parametersrecovery
, la timeline change
.history
, archivérecovery_target_timeline
permet de choisir la timeline Ă suivre
postgresql.conf
port
listen_addresses
data_directory
pg_hba.conf
pg_dumpall -g
: définition des rôles et des tablespacespg_dump
: contenu de chaque base de donnéespg_start_backup()
et pg_stop_backup()
pg_start_backup()
de terminer avant de démarrer la sauvegardepg_stop_backup()
de terminer avant de déclarer la sauvegarde valide.backup
pg_restore
détecter le format des dump binairesbackup_label
archivé pour obtenir le STOP TIME
du backuprestore_command
dans $PGDATA/recovery.conf
plain
tar
recovery.conf
pgespresso
gzip
, bzip2
, pigz
, pbzip2
, etc..barman
usage: barman [-h] [-v] [-c CONFIG] [-q] [-d] [-f {console}]
{cron,list-server,show-server,status,check,diagnose,
backup,list-backup,how-backup,list-files,recover,
delete,rebuild-xlogdb}
[...]
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-c CONFIG, --config CONFIG
uses a configuration file (...)
-q, --quiet be quiet (default: False)
-d, --debug debug output (default: False)
-f {console}, --format {console}
output format (default: console)
/etc/barman.conf
INI
[barman]
configuration_files_directory = /etc/barman.d
barman
postgres
pour les serveurs PostgreSQLbarman
pour le serveur de sauvegardespostgres
(serveurs PG) et barman
(serveur barman)postgresql.conf
:wal_level = 'replica'
archive_mode = on
archive_command = 'rsync -a %p barman@bkpsrv:<INCOMING_WALS_DIR>/%f'
barman.conf
[barman]
barman_home = /var/lib/barman
barman_user = barman
log_file = /var/log/barman/barman.log
log_level = INFO
configuration_files_directory = /etc/barman.d
compression = gzip
reuse_backup = link
immediate_checkpoint = false
basebackup_retry_times = 0
basebackup_retry_sleep = 30
backup_options = exclusive_backup
bandwidth_limit = 4000
network_compression = false
minimum_redundancy = 5
retention_policy = RECOVERY WINDOW OF 7 DAYS
last_backup_maximum_age = 2 DAYS
pre_backup_script = ...
post_backup_script = ...
pre_archive_script = ...
post_archive_script = ...
configuration_files_directory
[pgsrv]
description = "PostgreSQL Instance pgsrv"
ssh_command = ssh postgres@pgsrv
conninfo = host=pgsrv user=postgres dbname=postgres
backup_directory =
basebackup_directory =
wals_directory =
incoming_wals_directory =
show-server
montre la configuration$ sudo -u barman barman show-server {<instance> | all}
check
effectue des tests pour la valider$ sudo -u barman barman check {<instance> | all}
status
affiche des informations détaillées
$ sudo -u barman barman status {<instance> | all}
diagnose
renvoie
status
json
$ sudo -u barman barman diagnose
$ sudo -u barman barman backup {<instance> | all}
$ sudo -u barman barman list-backup {<instance> | all}
show-backup
affiche le détail d'une sauvegarde (taille...)$ sudo -u barman barman show-backup <instance> <ID-sauvegarde>
list-files
affiche le détail des fichiers d'une sauvegarde$ sudo -u barman barman list-files <instance> <ID-sauvegarde>
$ sudo -u barman barman delete <instance> <ID-sauvegarde>
cron
déclenche la maintenance
$ sudo -u barman barman cron
crontab
Linuxrecovery.conf
$ sudo -u barman barman recover \
--remote-ssh-command "ssh postgres@pgsrv" \
--target-time "2015-09-02 14:15:00" \
pgsrv 20150902T095027 /var/lib/pgsql/9.4/main
rsync/ssh
rsync
+ lien matériel)usage: pitrery [options] action [args]
options:
-c file Path to the configuration file
-n Show the command instead of executing it
-V Display the version and exit
-? Print help
actions:
list
backup
restore
purge
postgresql.conf
archive_mode = on
wal_level = replica
archive_command = '/usr/local/bin/archive_xlog %p'
postgres
sur chacun des serveurs (nœud PG et serveur de sauvegarde)/usr/local/etc/pitrery/pitr.conf
PGPSQL="psql"
PGUSER="postgres"
PGPORT=5432
PGHOST="/var/run/postgresql"
PGDATABASE="postgres"
PGDATA="/var/lib/pgsql/9.4/data"
PGXLOG=
BACKUP_DIR="/var/lib/pitrery"
ARCHIVE_DIR="$BACKUP_DIR/archived_xlog"
STORAGE
tar
: sauvegarde complète, éventuellement compresséersync
: sauvegarde complète ou différentielle, pas de compressionPURGE_KEEP_COUNT=3
PURGE_OLDER_THAN=7
ARCHIVE_LOCAL="no"
ARCHIVE_HOST=bkpsrv
ARCHIVE_USER=pitrery
ARCHIVE_COMPRESS="yes"
archive_xlog
archive_xlog
tar
COMPRESS_BIN=
COMPRESS_SUFFIX=
UNCOMPRESS_BIN=
BACKUP_COMPRESS_BIN=
BACKUP_COMPRESS_SUFFIX=
BACKUP_UNCOMPRESS_BIN=
LOG_TIMESTAMP="yes"
archive_xlog
)SYSLOG="no"
SYSLOG_FACILITY="local0"
SYSLOG_IDENT="postgres"
PRE_BACKUP_COMMAND=
POST_BACKUP_COMMAND=
$ sudo -u postgres /usr/local/bin/pitrery backup
-s
permet de spécifier un mode, tar
ou rsync
$ sudo -u postgres /usr/local/bin/pitrery purge
$ sudo -u postgres /usr/local/bin/pitrery list
-v
permet d'avoir plus de détails
cron
00 00 * * * ( /usr/local/bin/pitrery backup \
&& /usr/local/bin/pitrery purge) \
>> /var/log/postgresql/pitrery-$(date +\%Y-\%m-\%d).log 2>&1
$ sudo -u postgres /usr/local/bin/pitrery restore
-D
permet de modifier la cible du PGDATA-t
permet de modifier la cible d'un tablespace-x
permet de modifier la cible du pg_wal
-d
permet de spécifier une date de restaurationrecovery.conf
recovery.conf
pg_wal
pg_resetwal
fsync
full_page_write
--data-checksums
de initdb
REINDEX
)zero_damaged_pages
peut aiderpg_relation_filepath()
ctid
/ pageinspect
dd
pg_wal
pg_resetwal
permet de forcer le démarrageglobal/pg_control
pg_xact