博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 使用PG_Rman进行物理备份
阅读量:5959 次
发布时间:2019-06-19

本文共 4737 字,大约阅读时间需要 15 分钟。

背景


在Oracle下我们可以使用rman进行物理备份,支持数据库的全量、增量、归档的备份模式

而PostgreSQL作为开源数据库,近些时间来也一直向商业版数据库看齐,也推出了开源功工具pg_rman,也具备了oracle rman大部分的功能

pg_rman介绍


  • pg_rman是一个开源的PostgreSQL备份软件;
  • pg_rman使用的是pg_start_backup(), copy, pg_stop_backup()的备份模式;
  • pg_rman跑的不是流复制协议,而是文件拷贝,所以pg_rman必须和数据库节点跑一起;

如果在standby节点跑pg_rman,pg_rman则需要通过网络连接到主节点执行pg_start_backup和pg_stop_backup。

pg_rman的用法非常简单,支持以下几种运行模式。

主要代码命令:

命令 说明
init 初始化备份目录
backup 在线备份
restore 恢复
show 查看备份历史
validate 验证备份
delete 删除备份文件
purge 从备份目录中删除已删除备份

安装


下载并安装rpm安装包

我们一般使用的PG数据库版本为9.6.3,那么对应pg_rman也有相应的版本为:

同时需要下载依赖:

或者直接使用wget下载:

[root@out-pg ~]# wget https://github.com/ossc-db/pg_rman/releases/download/V1.3.7/pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm[root@out-pg ~]# wget  https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm

下载后安装rpm包

rpm -ivh postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm
rpm -ivh pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm

[root@out-pg ~]#  rpm -ivh postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm 警告:postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID 442df0f8: NOKEY 准备中... ################################# [100%] 软件包 postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64 已经安装 [root@out-pg ~]# rpm -ivh pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm 准备中... ################################# [100%] 软件包 pg_rman-1.3.7-1.pg96.rhel7.x86_64 已经安装

安装完成后,pg_rman会安装在默认的/usr/psql-9.6/目录下,接下来要设置环境变量

设置环境变量

修改/root/.bash_profile

vim /root/.bash_profile
source /root/.bash_profile

PATH=$PATH:$HOME/binexport PG_RMAN=/usr/pgsql-9.6export PGHOME=/usr/local/pgsql export PGDATA=/db/pgsql/data export PGLIB=/usr/local/pgsql/lib export SRVLOG_PATH=/var/lib/pgsql/9.6/data/pg_log export ARCLOG_PATH=/home/postgres/arc_log export BACKUP_PATH=/home/postgres/backup export PATH=$PGHOME/bin:$PATH:$PG_RMAN/bin export PATH

其中PGHOME、PGDATA、PGLIB与实际目录一致

SRVLOG_PATH、ARCLOG_PATH、BACKUP_PATH为rman需要
设置完环境变量后,输入pg_rman命令

[root@out-pg ~]# pg_rmanpg_rman manage backup/recovery of PostgreSQL database.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 purgeGeneric options:  --help                    show this help, then exit --version output version information, then exit

生效

创建文件夹

mkdir /home/postgres/arc_log/
附加权限
chown postgres:postgres / /home/postgres/arc_log

初始化rman

使用rman init命令初始化

[root@out-pg ~]# pg_rman initpg_rman: could not open file "/db/pgsql/data/global/pg_control" for reading: 没有那个文件或目录

上面错误是由于PG_DATA环境变量设置不正确

修改后再执行init

[root@out-pg ~]# pg_rman initERROR: backup catalog already exist and it's not empty

以上错误需要重新删除backup目录,删除后重新初始化正常

[root@out-pg ~]# rm -rf /home/postgres/backup/*[root@out-pg ~]# pg_rman init                  INFO: ARCLOG_PATH is set to '/home/postgres/arc_log'INFO: SRVLOG_PATH is set to '/var/lib/pgsql/9.6/data/pg_log'

生成备份元数据,查看目录

[root@out-pg ~]# ll /home/postgres/backup/总用量 8drwx------ 4 root root 35 11月 23 13:30 backup -rw-r--r-- 1 root root 83 11月 23 13:30 pg_rman.ini -rw-r--r-- 1 root root 40 11月 23 13:30 system_identifier drwx------ 2 root root 6 11月 23 13:30 timeline_history [root@out-pg ~]# cat /home/postgres/backup/pg_rman.ini ARCLOG_PATH='/home/postgres/arc_log' SRVLOG_PATH='/var/lib/pgsql/9.6/data/pg_log'

修改postgres.conf

vim /usr/local/postgresql/data/postgresql.conf

修改三个参数wal_level,archive_mode,archive_command

wal_level = archive                     archive_mode = on               archive_command = 'cp %p /home/postgres/arc_log/%f'

重启数据库

[root@out-pg backup]# service postgresql restartRestarting PostgreSQL: ok

备份数据库


全量备份

备份命令

pg_rman backup -b full -U postgres -d aegis -h 127.0.0.1 -p 5432

[root@out-pg backup]# pg_rman backup -b full -U postgres -d aegis -h 127.0.0.1 -p 5432INFO: copying database filesINFO: copying archived WAL filesINFO: backup complete INFO: Please execute 'pg_rman validate' to verify the files are correctly copied.

可以添加-Z参数使用zlib压缩数据,大大减少备份量,一下为对比,节省空间将近50%

[root@out-pg ~]# du /home/postgres/backup/20181123/* -slh13G     /home/postgres/backup/20181123/142131 7.0G /home/postgres/backup/20181123/154458

备份完成后需要验证

不验证的备份无法使用

[root@out-pg backup]# pg_rman validateINFO: validate: "2018-11-23 14:21:31" backup and archive log files by CRCINFO: backup "2018-11-23 14:21:31" is valid

最后查看备份

使用命令

pg_rman show

[root@out-pg backup]# pg_rman show===================================================================== StartTime           EndTime              Mode    Size   TLI  Status =====================================================================2018-11-23 14:21:31 2018-11-23 14:26:47 FULL 13GB 1 OK

转载自:

https://www.jianshu.com/p/db2b6d218e37

转载于:https://www.cnblogs.com/xibuhaohao/p/11114653.html

你可能感兴趣的文章
如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计硬件积木的!...
查看>>
SQL server 2005高可用性之----数据库镜像
查看>>
轻、快、好、免费的开发工具
查看>>
[LeetCode] Delete Duplicate Emails 删除重复邮箱
查看>>
fullCalendar动态获取数据
查看>>
Android 服务端开发之开发环境配置
查看>>
如何建立自己的私有云存储
查看>>
CPA,CPS,CPC,CPM的特点
查看>>
Phonegap Online和Offline
查看>>
软件设计
查看>>
Open XML应用安全(4)文档校验
查看>>
jquery.lazyload的使用
查看>>
学习笔记:启动对特定用户的会话的sql跟踪
查看>>
开发node桌面级应用工具:apk转化epub
查看>>
笨笨图片批量抓取下载 V0.2 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程]...
查看>>
VS2010启动程序提示文件加载 使用 简体中文(GB2312)编码加载文件解决办法
查看>>
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
Android 动态注册 亮屏、息屏广播
查看>>
NYOJ 题目77 开灯问题(简单模拟)
查看>>
15.6. HTML嵌入图片
查看>>