资讯专栏INFORMATION COLUMN

pg_rman备份工具

IT那活儿 / 816人阅读
pg_rman备份工具

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

  
pg_rman简介:

pg_rman是一款专门为postgresql设计的在线备份恢复的工具。其支持在线(热备份)和基于时间点备份方式。

它是一个开源的PostgreSQL备份软件,使用的是pg_start_backup(), copy, pg_stop_backup()的备份模式,因为是文件拷贝模式,所以pg_rman必须在数据库节点上运行。



pg_rman的安装

提示:在安装pg_rman之前,建议安装一套主从环境。

1.1 安装依赖

yum install -y bison flex readline-devel zlib-deve1 zlib zlib-devel gcc

1.2 下载地址

https://github.com/ossc-db/pg_rman/releases

1.3 编译安装

tar xf pg_rman-1.3.14-pg14.tar.gz
make && make install

1.4 创建备份目录

mkdir /pg_rman_backup/{fullbackup,walbackup,pg_srvlog} -p
chown -R postgres:postgres /pg_rman_backup

1.5 修改环境变量

vim /etc/profile
export BACKUP_PATH=/pg_rman_backup/fullbackup
export ARCLOG_PATH=/pg_rman_backup/walbackup
export SRVLOG_PATH=/pg_rman_backup/pg_srvlog

1.6 开启postgres归档

vim postgresql.conf
archive_mode = on
archive_command = DATE=`date +%Y%m%d`; DIR="/pg_rman_backup/walbackup/"; (test -d $DIR || mkdir -p $DIR) && cp %p $DIR/%f

1.7 pg_rman初始化

pg_rman init
如果没指定环境变量,可以使用以下命令进行初始化:
pg_rman -B /pg_rman_backup/fullbackup -D /postgres/data -A /pg_rman_backup/walbackup init

pg_rman参数说明:

vi pg_rman.ini
  • # 归档目录

    ARCLOG_PATH=/home/postgres/arch
  • # 数据库错误日志目录

    SRVLOG_PATH=/home/postgres/data/log
  • # 压缩数据

    COMPRESS_DATA = YES
  • # 保存归档文件个数

    KEEP_ARCLOG_FILES = 10
  • # 保存归档的天数

    KEEP_ARCLOG_DAYS = 10
  • # 备份冗余度

    KEEP_DATA_GENERATIONS = 3
  • # 保存备份集时间

    KEEP_DATA_DAYS = 10
  • # 保存日志文件个数

    KEEP_SRVLOG_FILES = 10
  • # 保存日志文件天数

    KEEP_SRVLOG_DAYS = 10

说明:
以上pg_rman.ini配置文件中指定的是pg_rman的备份策略,如果没有在配置文件中指定,也可以每次在备份过程中用以下参数用来指定备份策略。
除此之外还详细介绍了一些额外的使用参数,如下所示:

1)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

2)Common Options

  • # 数据库存储区域的路径位置
    -D, --pgdata=PATH
  • # 存档存储区的路径位置
    -A, --arclog-path=PATH
  • # 服务器日志存储区域的路径位置
    -S, --srvlog-path=PATH
  • # 检查一下,看看能做些什么

    -c, --check

  • # 详细显示消息的详细信息
    -v, --verbose
  • # 显示已处理文件的进度

    -P, --progress

3)Backup options
  • # 备份模式=完全模式、增量模式或归档模式

    -b, --backup-mode=full, incremental, or archive

  • # 使用serverlog,还可以备份服务器日志文件

    -s, --with-serverlog

  • # 压缩数据使用zlib压缩数据备份

    -Z, --compress-data

  • # 平滑检查点在备份之前平滑检查点

    -C, --smooth-checkpoint

  • # 完全备份出错:切换到完全备份模式

    -F, --full-backup-on-error

  • # NUM保留完整数据备份的NUM代

    --keep-data-generations=NUM

  • # 保留足够的数据备份以恢复到N天前

    --keep-data-days=NUM

  • # NUM保留归档文件的数量

    --keep-arclog-files=NUM

  • # 以天为单位修改存档的WAL

    --keep-arclog-days=DAY

  • # NUM保留服务器日志数

    --keep-srvlog-files=NUM

  • # 在DAY中修改服务器日志

    --keep-srvlog-days=DAY

  • # 从备用主机进行备份时备用主机的主机名

    --standby-host=HOSTNAME

  • # 从备用端口进行备份时的备用端口
    --standby-port=PORT
4)Restore options
  • # 恢复将继续的时间戳

    --recovery-target-time

  • # 恢复目标xid事务ID

    --recovery-target-xid

  • # 恢复目标,包括我们是否在恢复后立即停止

    --recovery-target-inclusive

  • # 恢复到特定时间线

    --recovery-target-timeline

  • # 硬拷贝复制archivelog不是硬链接

    --hard-copy

  • # 显示全部也显示已删除的备份

    -a, --show-all

  • # 强制删除早于给定日期的备份
    -f, --force
5)Connection options
  • # 要连接的数据库

    -d, --dbname=DBNAME

  • # 主机名、数据库服务器、主机或套接字目录

    -h, --host=HOSTNAME

  • # 端口数据库服务器端口

    -p, --port=PORT

  • # 要连接的用户名

    -U, --username=USERNAME

  • # 无密码。从不提示输入密码

    -w, --no-password

  • # 密码强制密码提示
    -W, --password
6)Generic options
  • # 安静,不显示任何信息或调试消息

    -q, --quiet

  • # 调试显示调试消息

    --debug

  • # 帮助显示此帮助,然后退出

    --help

  • # 版本输出版本信息,然后退出

    --version


pg_rman全量备份

2.1 创建数据

create database test;
create table t1 (id int);
insert into t1 values (1);

2.2 进行全量备份

pg_rman backup --backup-mode=full --with-serverlog –progress
提示:如果没有指定环境变量,可以使用如下命令进行备份:
pg_rman --backup-path /pg_rman_backup/fullbackup --pgdata 
/postgres/data --arclog-path /pg_rman_backup/walbackup
backup -b full -s --srvlog-path=/pg_rman_backup/pg_srvlog -U
postgres -d postgres -h 127.0.0.1 -p 5432
提示:以上为主节点的全量备份,如果想备节点进行全量备份,可以在备节点使用如下命令进行全量备份:
pg_rman -B /pg_rman_backup/fullbackup -A 
/pg_rman_backup/walbackup -D /postgres/data backup -b full -
s -S /pg_rman_backup/pg_srvlog -U postgres -d postgres -h
10.0.0.10 -p 5432 --standby-host=10.0.0.11 --standby-
port=5432

2.3 校验备份集

如上,我们已得到一个全库备份。因此只需要从验证备份开始。
pg_rman validate

2.4 列出备份集

pg_rman show


增量备份

重点注意:
增量备份是基于文件系统的update time时间线.
增量备份前提:
  • 必须要有个对应的全库备份。
  • 当全库备份后需要验证备份集。

3.1 插入一行数据

insert into t1 values (2);
3.2 进行增量备份
pg_rman backup --backup-mode incremental --progress --compress-data
如果没有设置环境变量,可以使用如下命令:
pg_rman --backup-path /pg_rman_backup/fullbackup --pgdata 
/postgres/data --arclog-path /pg_rman_backup/walbackup
backup --backup-mode incremental --progress --compress-data
-U postgres -d postgres -h 127.0.0.1 -p 5432
提示:如果是主备环境,可以使用如下命令:
pg_rman -B /pg_rman_backup/fullbackup -D /postgres/data -A 
/pg_rman_backup/walbackup backup --backup-mode incremental -
-progress --compress-data -U postgres -d postgres -h
10.0.0.10 -p 5432 --standby-host=10.0.0.11 --standby-
port=5432

3.3 校验备份集

pg_rman validate


删除备份

4.1 强制删除比规定日期更旧的备份

pg_rman delete  -f 2022-08-16 20:28:21
pg_rman purge

4.2 指定备份删除

pg_rman delete 2022-08-16 20:28:21
pg_rman purge


数据恢复

5.1 全量备份的恢复

1)删除数据库数据

drop database test;

2)停止数据库

pg_ctl stop

3)进行数据恢复:(EndTime)

pg_rman restore -B /pg_rman_backup/fullbackup/ --recovery-target-time "2022-08-16 20:14:58" --hard-copy

4)查看数据

如下图所示,已成功将全量的数据恢复:

提示:

  • --如果不指定recovery-target-time,则恢复到最新时间。
  • --如果不指定hard-copy,则归档日志目录里的归档日志是使用的硬连接指向备份目录中的归档日志,加了这个参数的话,则是直接把备份目录中的归档日志拷贝到归档日志目录。

5.2 增量备份的恢复

1)删除数据库数据

drop database test;

2)停止数据库

pg_ctl stop

3)进行数据恢复:(EndTime)

pg_rman restore -B /pg_rman_backup/fullbackup/ --recovery-target-time "2022-08-16 20:15:01" --hard-copy

4)查看数据

如下图所示,已成功将增量的数据恢复:



备份策略演练

说明:

以上我们演练了全量增量的备份,以及全量增量的恢复,除次之外pg_rman还可以指定备份的策略进行备份,例如备份以及归档备份的备份冗余度,备份以及归档备份保留的天数等,以下我们就以备份冗余度保存的份数进行演练:

6.1 修改配置文件

修改配置文件,添加如下参数,这里我们保留3份:
vi pg_rman.ini
KEEP_DATA_GENERATIONS = 3

6.2 进行备份

同样的操作执行4次以上:
pg_rman -B /pg_rman_backup/fullbackup -A 
/pg_rman_backup/walbackup -D /postgres/data backup -b full -
s -S /pg_rman_backup/pg_srvlog -U postgres -d postgres -h
10.0.0.10 -p 5432 --standby-host=10.0.0.11 --standby-
port=5432
pg_rman validate
如下图所示,我们做了3次全备份,做第4次全备份的时候会第1次的备份从catalog里面删除。

本文作者:张学衡(上海新炬王翦团队)

本文来源:“IT那活儿”公众号


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129265.html

相关文章

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<