1、pg_rman安装
[root@node2 tmp]# unzip pg_rman-master.zip
[root@node2 tmp]# cd pg_rman-master
[root@node2 pg_rman-master]# make
[root@node2 pg_rman-master]# make install
注意:如果安装失败的话,需要确认是否下载的对应版本。
2、开启数据库归档模式
[postgres@node2 data]$ vi postgresql.conf
archive_mode = on
archive_command = 'cp %p /data/pgdata/archive_wals/%f'
[postgres@node2 data]$ pg_ctl restart
注意:如果不开启归档模式在初始化备份目录的时候会出现下面的警告信息。
[root@node2 tmp]# pg_rman init --backup-path=/data/pgdata/backups/
WARNING: ARCLOG_PATH is not set yet
DETAIL: The archive_command is not set in postgresql.conf.
HINT: Please set ARCLOG_PATH in pg_rman.ini or environmental variable.
INFO: SRVLOG_PATH is set to '/data/pgdata/data/log'
3、查看pg_rman备份相关参数
[postgres@node2 ~]$ pg_rman --help
选项具体说明如下。
●-D,--pgdata=PATH:PostgreSQL数据库的数据文件路径。
●-A,--arclog-path=PATH:PostgreSQL数据库WAL归档日志路 径。
●-S,--srvlog-path=PATH:PostgreSQL数据库日志路径。
●-B,--backup-path=PATH:pg_rman工具生成的备份文件存储路 径。
●-c,--check:显示操作信息。
●-v,--verbose:显示详细操作消息。
●-P,--progress:显示已处理文件的进度。
●-b,--backup-mode=MODE full,incremental或archive:备份模 式,可能是全量备
份、增量备份或归档备份。
●-s,--with-serverlog:备份WAL日志文件。
●-Z,--compress-data:使用zlib压缩数据备份。
●-C,--smooth-checkpoint:在备份之前做平滑的checkpoint。
●-F,--full-backup-on-error:如果pg_rman 工具在当前时间点找不到 有效的全量备
份,则切换到全量备份模式。需要注意的是,此选项仅 在
“--backup-mode=incremental”或archive中使用。
●--keep-data-generations=NUM:保留NUM个完整数据备份。
●--keep-data-days=DAY:保留足够的数据备份以恢复到DAY天 前。
●--keep-arclog-files=NUM:保留NUM个WAL日志文件。
●--keep-arclog-days=DAY:保留在DAY天内修改的WAL日志文 件。
●--keep-srvlog-files=NUM:保留NUM个日志文件。
●--keep-srvlog-days=DAY:保留在DAY天内的日志文件。
●--standby-host=HOSTNAME:从备用数据库进行备份时的备用主 机。
●--standby-port=PORT:从备用数据库备份时的备用端口。
●--recovery-target-time:指定恢复到的时间点。
●--recovery-target-xid:指定恢复到的事务ID。
●--recovery-target-inclusive:是否在恢复目标之后停止。
●--recovery-target-timeline:恢复到指定的时间线。
●--hard-copy:复制WAL日志文件而不是符号链接。
●-f,--force:强制删除早于给定日期(DATE)的备份。
4、初始化备份目录,初始化完成后会自动生成相关的配置文件及目录
[postgres@node2 ~]$ pg_rman init --backup-path=/data/pgdata/backups/
[postgres@node2 ~]$ ll /data/pgdata/backups/
drwx------. 4 root root 4096 Nov 29 13:54 backup
-rw-r--r--. 1 root root 77 Nov 29 13:54 pg_rman.ini
-rw-r--r--. 1 root root 40 Nov 29 13:54 system_identifier
drwx------. 2 root root 4096 Nov 29 13:54 timeline_history
5、全量备份
[postgres@node2 ~]$ pg_rman backup --backup-mode=full -B /data/pgdata/backups/ --全量备份
[postgres@node2 ~]$ pg_rman show -B /data/pgdata/backups/ --查看备份集的状态
[postgres@node2 ~]$ pg_rman validate -B /data/pgdata/backups/ --校验备份集的有效性
6、增量备份
[postgres@node2 ~]$ pg_rman backup --backup-mode=incremental --with-serverlog -B /data/pgdata/backups/
--with-serverlog表示将数据库日志文件一起备份
[postgres@node2 ~]$ pg_rman validate -B /data/pgdata/backups/
[postgres@node2 ~]$ pg_rman show -B /data/pgdata/backups/
7、归档备份
[postgres@node2 ~]$ pg_rman backup --backup-mode=archive --with-serverlog -B /data/pgdata/backups/
[postgres@node2 ~]$ pg_rman validate -B /data/pgdata/backups/
8、恢复数据库
先停用数据库服务,然后删除数据库文件
[postgres@node2 data]$ pg_ctl stop
[postgres@node2 data]$ rm -rf $PGDATA/*
[postgres@node2 data]$ pg_rman restore -B /data/pgdata/backups/ --全量恢复
[postgres@node2 data]$ pg_rman restore --recovery-target-time='2022-11-29 15:47:42' -B /data/pgdata/backups/ --恢复到指定时间点
注意:
在 基于时间点之后,那么此时DB与之前的备份已经不在同一时间线上。恢复默认只沿着基础备份建立时时间线恢复而不会切换到新的时间线,所以建议在恢复之后,立即对数据库做一个全库的备份。
注:每次备份的时候会创建一个当天日期的目录,然后目录下面创建一个与当前时间一
致的目录。
9、修改备份策略
pg_rman初始化之后会在备份目录中产生 pg_rman.ini 文件
[postgres@node2 data]$ cd /data/pgdata/backups/
[postgres@node2 backups]$ cat pg_rman.ini
ARCLOG_PATH='/data/pgdata/archive_wals'
SRVLOG_PATH='/data/pgdata/data/log'
可以编辑这个文件修改备份策略
[postgres@node2 backups]$ vi pg_rman.ini
KEEP_DATA_GENERATIONS=4 KEEP_DATA_DAYS=30 KEEP_ARCLOG_DAYS=10 KEEP_SRVLOG_DAYS=30
KEEP_DATA_GENERATIONS=4,保留4份全备数量
KEEP_DATA_DAYS=30,数据保留30天,
KEEP_ARCLOG_DAYS=10,WAL日志保留10天
KEEP_SRVLOG_DAYS=30,LOG日志保留180天数
总结建议
- 在做备份操作时,建议使用参数
-C, --smooth-checkpoint do smooth checkpoint before backup (备份前做检查)
-Z, --compress-data compress data backup with zlib (使用zlib压缩数据备份)
- 在做恢复操作时,建议使用参数
–hard-copy copying archivelog not symbolic link (copy 归档日志,而不是link软连接)
- 备份目录不能放在数据目录中
否则每备份都会将之前的备份再备份一遍,从而导致备份文件异常增大