pg_rman

pg_rman
pg_rman工具是实现PostgreSQL数据库在线备份,物理备份和恢复的备份工具。可以实现全量备份,增量备份。
https://github.com/ossc-db/pg_rman

常用参数
Usage:
pg_rman OPTION init
pg_rman OPTION backup
pg_rman OPTION restore
pg_rman OPTION show [DATE]
pg_rman OPTION show detail [DATE]
pg_rman OPTION validate [DATE]
pg_rman OPTION delete DATE
pg_rman OPTION purge


命令选项:
-D, --pgdata=PATH 数据存储目录的路径
-A, --arclog-path=PATH 归档wal (预写)日志的路径
-S, --srvlog-path=PATH 数据库服务器存储日志的路径。
-B, --backup-path=PATH 备份数据存储的路径。
-c, --check 检查
-v, --verbose 显示详细消息
-P, --progress 显示已处理文件的进度

备份选项:
-b, --backup-mode=MODE 全备,增备,归档
-s, --with-serverlog 备份服务器日志文件
-Z, --compress-data 使用zlib压缩数据备份
-C, --smooth-checkpoint 在备份前做平滑检查点
-F, --full-backup-on-error 切换到完全备份模式,注意:此选项仅用于--backup-mode = incremental或archive

--keep-data-generations=NUM 保留NUM代完整数据备份
--keep-data-days=NUM 保持足够的数据备份以恢复到N天前
--keep-arclog-files=NUM 保留NUM个归档的WAL日志
--keep-arclog-days=DAY 保持存档的WAL在DAY天内修改
--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 复制archivelog而不是符号链接

目录选项:
-a 显示已删除的备份

删除选项:
-f 强制删除比规定日期更旧的备份

连接选项:
-d, --dbname=DBNAME 连接指定库
-h, --host=HOSTNAME 数据库主机名/IP地址
-p, --port=PORT 数据库端口
-U, --username=USERNAME 数据库用户名
-w, --no-password 从不提示密码
-W, --password 强制密码提示


配置
# 1. 生成备份目录
mkdir -p /pgdata/rmanbak
mkdir -p /pgdata/12/data/log

# 2. 需要修改环境变量
vim ~/.bash_profile
export PGDATA=/pgdata/12/data
export BACKUP_PATH=/pgdata/rmanbak
export ARCLOG_PATH=/archive
export SRVLOG_PATH=/pgdata/12/data/log
[postgres@pg01 ~]$ source ~/.bash_profile

3. 系统日志
log_destination = 'csvlog'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 10MB
log_min_messages = info
log_min_error_statement = error
log_min_duration_statement = 10

pg_rman 初始化
pg_rman init

pg_rman全量备份
pg_rman backup --backup-mode=full --with-serverlog --progress

pg_rman 校验备份集
pg_rman 的备份必须都是经过验证过的,否则不能进行恢复和增量备份。
pg_rman validate

pg_rman 列出备份集
ls -l /database-backup/postgresql-backup/fullbackup/

pg_rman增量备份:
增量备份是基于文件系统的update time时间线.增量备份必须有个对应的全库备份.
$ pg_rman backup --backup-mode incremental --progress --compress-data
$ pg_rman validate
$ pg_rman show

pg_rman删除备份集
pg_rman delete -f 'time'


pg_rman restore 还原
模拟数据库误删除:
$ /etc/init.d/postgresql stop
$ ps -ef | grep -i postmaster | grep -v grep
$cd data
$ ls -l
$ mv data data-bak # 将之间的目录作为备份。
$ mkdir data # 创建数据目录。
$ chmod 700 ./data

使用pg_rman restore还原
$ pg_rman restore
$ cat recovery.conf
# recovery.conf generated by pg_rman 1.3.7
restore_command = 'cp /archive/%f %p'
recovery_target_timeline = '1'


启动PostgreSQL数据库服务:
pg_ctl start

 

posted @ 2025-06-17 15:12  屠魔的少年  阅读(78)  评论(0)    收藏  举报