背景


在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也有相应的版本为:
pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm
同时需要下载依赖:
postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64

或者直接使用wget下载:

  1. [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
  2. [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


  1. [root@out-pg ~]# rpm -ivh postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm
  2. 警告:postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm: V4 DSA/SHA1 Signature, 密钥 ID 442df0f8: NOKEY
  3. 准备中... ################################# [100%]
  4. 软件包 postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64 已经安装
  5. [root@out-pg ~]# rpm -ivh pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm
  6. 准备中... ################################# [100%]
  7. 软件包 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

  1. PATH=$PATH:$HOME/bin
  2. export PG_RMAN=/usr/pgsql-9.6
  3. export PGHOME=/usr/local/pgsql
  4. export PGDATA=/db/pgsql/data
  5. export PGLIB=/usr/local/pgsql/lib
  6. export SRVLOG_PATH=/var/lib/pgsql/9.6/data/pg_log
  7. export ARCLOG_PATH=/home/postgres/arc_log
  8. export BACKUP_PATH=/home/postgres/backup
  9. export PATH=$PGHOME/bin:$PATH:$PG_RMAN/bin
  10. export PATH

其中PGHOME、PGDATA、PGLIB与实际目录一致
SRVLOG_PATH、ARCLOG_PATH、BACKUP_PATH为rman需要
设置完环境变量后,输入pg_rman命令

  1. [root@out-pg ~]# pg_rman
  2. pg_rman manage backup/recovery of PostgreSQL database.
  3. Usage:
  4. pg_rman OPTION init
  5. pg_rman OPTION backup
  6. pg_rman OPTION restore
  7. pg_rman OPTION show [DATE]
  8. pg_rman OPTION show detail [DATE]
  9. pg_rman OPTION validate [DATE]
  10. pg_rman OPTION delete DATE
  11. pg_rman OPTION purge
  12. Generic options:
  13. --help show this help, then exit
  14. --version output version information, then exit

生效

创建文件夹
mkdir /home/postgres/arc_log/
附加权限
chown postgres:postgres / /home/postgres/arc_log

初始化rman

使用rman init命令初始化

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

上面错误是由于PG_DATA环境变量设置不正确
修改后再执行init

  1. [root@out-pg ~]# pg_rman init
  2. ERROR: backup catalog already exist and it's not empty

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

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

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

  1. [root@out-pg ~]# ll /home/postgres/backup/
  2. 总用量 8
  3. drwx------ 4 root root 35 11 23 13:30 backup
  4. -rw-r--r-- 1 root root 83 11 23 13:30 pg_rman.ini
  5. -rw-r--r-- 1 root root 40 11 23 13:30 system_identifier
  6. drwx------ 2 root root 6 11 23 13:30 timeline_history
  7. [root@out-pg ~]# cat /home/postgres/backup/pg_rman.ini
  8. ARCLOG_PATH='/home/postgres/arc_log'
  9. 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

  1. wal_level = archive
  2. archive_mode = on
  3. archive_command = 'cp %p /home/postgres/arc_log/%f'

重启数据库

  1. [root@out-pg backup]# service postgresql restart
  2. Restarting PostgreSQL: ok

备份数据库


全量备份

备份命令
pg_rman backup -b full -U postgres -d aegis -h 127.0.0.1 -p 5432

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

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

  1. [root@out-pg ~]# du /home/postgres/backup/20181123/* -slh
  2. 13G /home/postgres/backup/20181123/142131
  3. 7.0G /home/postgres/backup/20181123/154458

备份完成后需要验证
不验证的备份无法使用


  1. [root@out-pg backup]# pg_rman validate
  2. INFO: validate: "2018-11-23 14:21:31" backup and archive log files by CRC
  3. INFO: backup "2018-11-23 14:21:31" is valid

最后查看备份

使用命令
pg_rman show

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

转载自:

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

PostgreSQL 使用PG_Rman进行物理备份的更多相关文章

  1. postgresql 常规操作以及检查备份

    一.建表时,复制源表的信息test=# test=# \d test.t1 Table "test.t1" Column | Type | Collation | Nullable ...

  2. Oracle 物理备份--rman

    Oracle 物理备份--rman 1.直接在服务器,打开命令行,输入: rman target/ 2.配置参数也一同备份 configure controlfile autobackup on; 如 ...

  3. NDB Cluster 存储引擎物理备份

    NDB Cluster 存储引擎物理备份NDB Cluster 存储引擎也是一款事务性存储引擎,和Innodb 一样也有redo 日志.NDBCluter 存储引擎自己提供了备份功能,可以通过相关的命 ...

  4. 使用 xtrabackup 进行MySQL数据库物理备份

    0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...

  5. mysql之使用xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

    注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉mysql再备份,一般很少用,因为很多应用不允许长时间停机,停机备份的可以直接CP数 ...

  6. Oracle基础 物理备份 冷备份和热备份(转)

    一.冷备份介绍:    冷备份数据库是将数据库关闭之后备份所有的关键性文件包括数据文件.控制文件.联机REDO LOG文件,将其拷贝到另外的位置.此外冷备份也可以包含对参数文件和口令文件的备份,但是这 ...

  7. MySQL · 物理备份 · Percona XtraBackup 备份原理

    http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...

  8. xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

    http://www.lai18.com/content/4733997.html 注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉 ...

  9. XtraBackup物理备份 阿里云的Mysql备份方案

    XtraBackup物理备份 Percona XtraBackup是世界上唯一的开源,免费的MySQL热备份软件,为InnoDB和XtraDB 数据库执行非阻塞备份.使用Percona XtraBac ...

随机推荐

  1. 以php中的算数运算符操作(整型,浮点型,字符串型,布尔型,空类型)数据

    // 环境 // // php版本 // PHP 7.0.33-0+deb9u1 (cli) (built: Dec 7 2018 11:36:49) ( NTS ) // Copyright (c) ...

  2. python正则表达式findall的使用

    文章来源与:http://www.cnblogs.com/zjltt/p/6955965.html 正则表达式 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模 ...

  3. Delphi XE10.1 引用计数(Delphi XE10.1 Berlin终于增加了对接口的Weak, UnSafe的支持)

    以往的Delphi版本,不支持接口的Weak,和UnSafe的引用,支持对象的Weak, UnSafe,而且仅在Android和Ios平台上支持. 现在Delphi XE10.1 Berlin终于增加 ...

  4. Django model反向关联名称的方法(转)

    原文:https://www.jb51.net/article/152825.htm

  5. hdu 1242 不用标记数组的深搜

    #include<stdio.h>#include<string.h>char mapp[220][220];int m,n,mmin;void dfs(int x,int y ...

  6. js的for循环中出现异步函数,回调引用的循环值总是最后一步的值?

    这几天跟着视频学习node.js,碰到很多的异步函数的问题,现在将for循环中出现的异步函数回调值的问题总结如下: 具体问题是关于遍历文件夹中的子文件夹的,for循环包裹异步函数的代码: for (v ...

  7. robot framework 如何处理循环条件下面的变量自增

    下面举了一个基础栗子,可以运行的.${num}就是我需要的自增变量.有人也许会问为什么不用${i},不是我不想用,而是我${i}有其他用处,必须另外定义一个变量,需要注意的是定义变量的时候,应该在循环 ...

  8. 让image居中对齐,网页自适应

    <div class="page4_content"> <div class="page4_box"> <div class=&q ...

  9. Apache常见interview

    Apache在Linux系统下的工作模式及特点?如何使Apache使用worker模式? prefork 是一种非线程.与派生的工作模式,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,某个 ...

  10. 18C 新的发行版和补丁模型

    18C 新的发行版和补丁模型 以后不再会有第一和第二个发行版,如12.1,12.2,以后只有18C,19C,20C 这样的发行版. 更少的One-Off 补丁 澄清1:版本家族 从生命周期支持上来说1 ...