1.安装
1.1.下载
下载要根据数据库版本下载
1.2.解压安装
用root用户安装
# root用户执行
cd /data/soft
tar vxf pg_rman-1.3.13-pg10.tar.gz
cd pg_rman-1.3.13-pg10
# pg_rman执行的时候,需要使用pg_config命令,所以要在PATH中加入pg_config命令路径
export PATH=$PATH:/usr/local/pgsql/bin/
make
make install
# make install后,会将pg_rman安装到$PGHOME/bin下
用postgres用户安装
# 和用root安装不同,需要软体所在目录权限和$PGHOME权限
# 因为自身的环境变量已有$PGHOME的路径,因此不需要声明pg_config的路径
cd /data/soft
tar vxf pg_rman-1.3.13-pg10.tar.gz
cd pg_rman-1.3.13-pg10
make
make install
1.3.初始化
# 使用数据库所属用户,一般为postgres用户
vi .bash_profile
export BACKUP_PATH=/data/pg_rman
source .bash_profile
pg_rman init
使用pg_rman init
命令后,会在$BACKUP_PATH下生成pg_rman.ini文件,里面会有pg_rman通过查看postgresql.conf中找到的归档路径(archive_command)和数据库日志路径(log_directory)
2.管理
2.1.备份
2.1.1.普通备份
# 全备
# -b备份类型,-s包含数据库日志,-Z启动压缩,需要数据库支持zlib,-C做一个检查点,-P显示备份进度
pg_rman -b full -s -Z -C -P backup;pg_rman validate
# 归档
pg_rman -b archive -s -Z -C -P backup;pg_rman validate
# 增量备份,增量备份需要有一次全备作为基础
pg_rman -b incremental -s -Z -C -P backup;pg_rman validate
# 显示备份信息
pg_rman show detail
2.1.2.高级备份
# oracle的rman可以设置时间窗口,备份冗余,自动删除过期备份,pg_rman也提供了类似的功能
keep-data-days # 时间窗口,备份需要保证数据库可以恢复到时间窗口内的任意时间点
keep-data-generations # 保留几代全备,如果设置为2,本次备份后不会删除上次备份
keep-arclog-files # 保留多少个归档文件
keep-arclog-days # 保留几天内的归档文件
keep-srvlog-files # 保留几个数据库日志文件
keep-srvlog-days # 保留几天内的数据库日志文件
pg_rman -b full -s -Z -C -P --keep-data-generations=1 --keep-arclog-days=1 backup
以上的选项也可以写入pg_rman.ini中,这样全备,归档,增量备份都可以使用以上保留策略
vi $BACKUP_PATH/pg_rman.ini
ARCLOG_PATH='/pgdata/archlog'
SRVLOG_PATH='/pgdata/data/log'
keep-arclog-days=1
keep-srvlog-days=1
compress_data=yes
with-serverlog=yes
smooth-checkpoint=yes
2.1.3.实战
本次全备完,删除之前的所有备份
# pg_rman.ini配置参考2.1.2节,定时执行如下脚本即可
vi pg_full_backup.sh
source ~/.bash_profile
pg_rman -b full -P backup
pg_rman validate
sleep 10
DeleteDate=$(date +%Y-%m-%d\ %H:%M:%S)
pg_rman delete \"$DeleteDate\"
pg_rman purge
# 如果要在终端执行全备,而全备需要很长时间
# nohup(no hang up,关闭终端的时候,会发出挂起的命令,所有正在执行的任务会被迫退出,加上后,关闭终端也不会退出)
# & 后台运行,直接放回,不会阻挡你其他工作
nohup pg_rman backup -b full -P > /archlog/pg_rman_backup/full_backup.log 2>&1 &
2.2.删除
# 删除之前备份
pg_rman show detail
pg_rman delete "2021-11-24 13:52:53";pg_rman purge
# 删除归档
show archive_command; #查看归档路径
pg_archivecleanup -d /archlog/archivedir 000000010000EEF700000060