Configuring Hot physical backup for PITR with continuous archiving:
The hot backup with continuous archiving help us to allow to recover the database point in time(PITR) from the time of database backup. Make sure to complete the basic requirement before starting the backup configuration, like where to store the base backup, WAL archives etc.
So, My environment contains the following,
pg01 --> PostgreSQL database server
pg03 --> Backup server
PGDATA --> Path to postgresql data directory
/u01/backups/base --> for storing the database base backup
/u01/backups/archive --> for storing WAL archives.
BACKUP_NAME--> Backup file name
Steps to configure the backup as follows,
1.) Create the backup and archive directories on backup server, if not already created. Here /u01/backups/base and /u01/backups/archive.
2.) Configure the passwordless ssh connectivity between database and backup server.
3.) Configure the database server, set the below parameters in postgresql.conf and restart the server, if not already present.
archive_mode = on
archive_command = 'rsync -a %p pg03:/u01/backups/archive/%f'
[postgres@pg01 data]$ pg_ctl restart
4.) Define the name of the backup.
export BACKUP_NAME=$(date '+%Y%m%d%H%M')
5.) start the backup as follows,
[postgres@pg01 pg_xlog]$ psql -c "select pg_start_backup('$BACKUP_NAME')"
pg_start_backup
-----------------
0/1A000028
(1 row)
6.) Copy the database datafiles excluding pg_xlog directory.
[postgres@pg01 pg_xlog]$ rsync -cva --inplace --exclude='pg_xlog/*' ${PGDATA}/ pg03:/u01/backups/base/$BACKUP_NAME/
sending incremental file list
created directory /u01/backups/base/201712292232
./
PG_VERSION
<<< Msg truncated for clarity purpose >>>
sent 110553420 bytes received 27255 bytes 17012411.54 bytes/sec
total size is 110441080 speedup is 1.00
7.) Stop the backup,
[postgres@pg01 pg_xlog]$ psql -c "select pg_stop_backup(), current_timestamp"
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
pg_stop_backup | now
----------------+----------------------------------
0/1A000248 | 2017-12-29 22:39:42.782183+05:30
(1 row)
[postgres@pg01 pg_xlog]$
8.) Login to pg03 server to validate the backup is created at defined location. /u01/backups/base
[postgres@pg03 201712292232]$ pwd
/u01/backups/base/201712292232
[postgres@pg03 201712292232]$ ls -ltr
total 144
-rw-------. 1 postgres postgres 4 Dec 22 00:28 PG_VERSION
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_twophase
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_tblspc
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_snapshots
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_serial
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_replslot
drwx------. 4 postgres postgres 4096 Dec 22 00:28 pg_multixact
drwx------. 4 postgres postgres 4096 Dec 22 00:28 pg_logical
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_dynshmem
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_commit_ts
-rw-------. 1 postgres postgres 88 Dec 22 00:28 postgresql.auto.conf
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_subtrans
-rw-------. 1 postgres postgres 1636 Dec 22 00:28 pg_ident.conf
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_clog
-rw-------. 1 postgres postgres 22319 Dec 22 00:35 postgresql.conf.sample
-rw-------. 1 postgres postgres 4515 Dec 22 00:51 pg_hba.conf
drwx------. 7 postgres postgres 4096 Dec 29 20:08 base
-rw-------. 1 postgres postgres 4658 Dec 29 22:20 postgresql.conf
-rw-------. 1 postgres postgres 72 Dec 29 22:20 postmaster.pid
-rw-------. 1 postgres postgres 37 Dec 29 22:20 postmaster.opts
drwx------. 2 postgres postgres 4096 Dec 29 22:20 pg_stat
drwx------. 2 postgres postgres 4096 Dec 29 22:20 pg_notify
drwx------. 2 postgres postgres 4096 Dec 29 22:20 pg_log
drwx------. 2 postgres postgres 4096 Dec 29 22:21 global
drwx------. 2 postgres postgres 4096 Dec 29 22:34 pg_xlog
-rw-------. 1 postgres postgres 202 Dec 29 22:34 backup_label
drwx------. 2 postgres postgres 4096 Dec 29 22:35 pg_stat_tmp
[postgres@pg03 201712292232]$
The hot backup with continuous archiving help us to allow to recover the database point in time(PITR) from the time of database backup. Make sure to complete the basic requirement before starting the backup configuration, like where to store the base backup, WAL archives etc.
So, My environment contains the following,
pg01 --> PostgreSQL database server
pg03 --> Backup server
PGDATA --> Path to postgresql data directory
/u01/backups/base --> for storing the database base backup
/u01/backups/archive --> for storing WAL archives.
BACKUP_NAME--> Backup file name
Steps to configure the backup as follows,
1.) Create the backup and archive directories on backup server, if not already created. Here /u01/backups/base and /u01/backups/archive.
2.) Configure the passwordless ssh connectivity between database and backup server.
3.) Configure the database server, set the below parameters in postgresql.conf and restart the server, if not already present.
archive_mode = on
archive_command = 'rsync -a %p pg03:/u01/backups/archive/%f'
[postgres@pg01 data]$ pg_ctl restart
4.) Define the name of the backup.
export BACKUP_NAME=$(date '+%Y%m%d%H%M')
5.) start the backup as follows,
[postgres@pg01 pg_xlog]$ psql -c "select pg_start_backup('$BACKUP_NAME')"
pg_start_backup
-----------------
0/1A000028
(1 row)
6.) Copy the database datafiles excluding pg_xlog directory.
[postgres@pg01 pg_xlog]$ rsync -cva --inplace --exclude='pg_xlog/*' ${PGDATA}/ pg03:/u01/backups/base/$BACKUP_NAME/
sending incremental file list
created directory /u01/backups/base/201712292232
./
PG_VERSION
<<< Msg truncated for clarity purpose >>>
sent 110553420 bytes received 27255 bytes 17012411.54 bytes/sec
total size is 110441080 speedup is 1.00
7.) Stop the backup,
[postgres@pg01 pg_xlog]$ psql -c "select pg_stop_backup(), current_timestamp"
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
pg_stop_backup | now
----------------+----------------------------------
0/1A000248 | 2017-12-29 22:39:42.782183+05:30
(1 row)
[postgres@pg01 pg_xlog]$
8.) Login to pg03 server to validate the backup is created at defined location. /u01/backups/base
[postgres@pg03 201712292232]$ pwd
/u01/backups/base/201712292232
[postgres@pg03 201712292232]$ ls -ltr
total 144
-rw-------. 1 postgres postgres 4 Dec 22 00:28 PG_VERSION
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_twophase
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_tblspc
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_snapshots
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_serial
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_replslot
drwx------. 4 postgres postgres 4096 Dec 22 00:28 pg_multixact
drwx------. 4 postgres postgres 4096 Dec 22 00:28 pg_logical
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_dynshmem
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_commit_ts
-rw-------. 1 postgres postgres 88 Dec 22 00:28 postgresql.auto.conf
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_subtrans
-rw-------. 1 postgres postgres 1636 Dec 22 00:28 pg_ident.conf
drwx------. 2 postgres postgres 4096 Dec 22 00:28 pg_clog
-rw-------. 1 postgres postgres 22319 Dec 22 00:35 postgresql.conf.sample
-rw-------. 1 postgres postgres 4515 Dec 22 00:51 pg_hba.conf
drwx------. 7 postgres postgres 4096 Dec 29 20:08 base
-rw-------. 1 postgres postgres 4658 Dec 29 22:20 postgresql.conf
-rw-------. 1 postgres postgres 72 Dec 29 22:20 postmaster.pid
-rw-------. 1 postgres postgres 37 Dec 29 22:20 postmaster.opts
drwx------. 2 postgres postgres 4096 Dec 29 22:20 pg_stat
drwx------. 2 postgres postgres 4096 Dec 29 22:20 pg_notify
drwx------. 2 postgres postgres 4096 Dec 29 22:20 pg_log
drwx------. 2 postgres postgres 4096 Dec 29 22:21 global
drwx------. 2 postgres postgres 4096 Dec 29 22:34 pg_xlog
-rw-------. 1 postgres postgres 202 Dec 29 22:34 backup_label
drwx------. 2 postgres postgres 4096 Dec 29 22:35 pg_stat_tmp
[postgres@pg03 201712292232]$
9.) Check the archives are continuously shipping to pg03 server.
[postgres@pg03 archive]$ ls -tlr
-rw-------. 1 postgres postgres 16777216 Dec 29 17:17 00000001000000000000000A
-rw-------. 1 postgres postgres 16777216 Dec 29 17:17 00000001000000000000000B
-rw-------. 1 postgres postgres 16777216 Dec 29 22:30 000000020000000000000018
-rw-------. 1 postgres postgres 16777216 Dec 29 22:30 000000020000000000000017
-rw-------. 1 postgres postgres 16777216 Dec 29 22:30 000000020000000000000016
-rw-------. 1 postgres postgres 16777216 Dec 29 22:32 000000020000000000000019
-rw-------. 1 postgres postgres 299 Dec 29 22:39 00000002000000000000001A.00000028.backup
-rw-------. 1 postgres postgres 16777216 Dec 29 22:39 00000002000000000000001A
[postgres@pg03 archive]$
Note:- We must have both base backup and archive backup to perform the point in time recovery(PITR). Hence please plan your backup retention properly.
and finally, don;t forget to test the strategies in test or dev environment before going for production.
and finally, don;t forget to test the strategies in test or dev environment before going for production.
Comments
Post a Comment