1.介绍

  PostgreSQL已经支持类似的Oracle的rman的备份工具的功能,支持全量,增量,归档三种备份模式,支持压缩,支持备份集的管理等。
  pg_rman使用的是pg_start_backup(),copy,pg_stop_backup()的备份模式,pg_rman跑的不是流复制协议,而是文件拷贝,所以pg_rman必须和数据库节点跑在一起。如果在待机节点跑pg_rman,pg_rman则需要通过网络连接到主节点执行pg_start_backup和pg_stop_backup.pg_rman的用法非常简单,支持以下几种运行模式。
pg_rman常用命令
 
  1.  
    pg_rman [ OPTIONS ] { init |
  2.  
                  backup |
  3.  
                 restore |
  4.  
       show [ DATE | detail ] |
  5.  
          validate [ DATE ] |
  6.  
              delete DATE |
  7.  
                  purge }
  8.  
    * init:初始化备份目录。
  9.  
    * backup:进行在线备份。
  10.  
        -b, --backup-mode=MODE full, incremental, or archive
  11.  
        -s, --with-serverlog also backup server log files
  12.  
        -Z, --compress-data compress data backup with zlib
  13.  
        -C, --smooth-checkpoint do smooth checkpoint before backup
  14.  
        -F, --full-backup-on-error switch to full backup mode if pg_rman cannot find validate full backup on current timeline NOTE: this option is only used in     --backup-mode=incremental or archive.
  15.  
    --keep-data-generations=NUM keep NUM generations of full data backup --keep-data-days=NUM keep enough data backup to recover to N days ago                 --keep-arclog-files=NUM keep NUM of archived WAL
  16.  
        --keep-arclog-days=DAY keep archived WAL modified in DAY days
  17.  
        --keep-srvlog-files=NUM keep NUM of serverlogs
  18.  
        --keep-srvlog-days=DAY keep serverlog modified in DAY days
  19.  
        --standby-host=HOSTNAME standby host when taking backup from standby
  20.  
        --standby-port=PORT standby port when taking backup from standby
  21.  
    * restore:恢复。
  22.  
    --recovery-target-time time stamp up to which recovery will proceed --recovery-target-xid transaction ID up to which recovery will proceed --recovery-target-inclusive whether we stop just after the recovery target --recovery-target-timeline recovering into a particular timeline --hard-copy copying archivelog not symbolic link
  23.  
    * show:显示备份历史记录 详细信息选项显示每个备份的附加信息。
  24.  
    * validate:验证备份文件。未经验证的备份不能用于还原和增量备份。
  25.  
    * delete:删除备份文件。
  26.  
    * purge:从备份目录中删除已删除的备份

2.使用

(1) 初始化备份目录
pg_rman init -B <a backup catalog path>
  建议在初始化备份目录之前进行设置log_directory,archive_mode并archive_command在postgresql.conf中进行设置。如果变量已初始化,则pg_rman可以将配置文件调整为该设置。在这种情况下,您必须为PostgreSQL指定数据库集群路径。请在PGDATA环境变量或-D/ --pgdata选项中指定。
 
(2) 备份模式
  1.  
    # 完全备份:备份整个数据库集群。
  2.  
    pg_rman backup -b full
  3.  
      
  4.  
    # 增量备份:仅备份使用相同时间轴在上次验证备份后修改的文件或页面。
  5.  
    pg_rman backup -b incremental
  6.  
      
  7.  
    # 存档WAL备份:仅备份存档WAL文件。
  8.  
    pg_rman backup -b archive
  9.  
      
  10.  
    # 备份集校验(建议在备份后尽快验证备份文件。未验证的备份不能用于还原或增量备份)
  11.  
    pg_rman validate
 
 
(3) 查看备份集
pg_rman show
 
pg_rman show detail
(显示更多详细信息)
 
     相关参数含义:
  1.  
         * StartTime:备份开始时的时间戳
  2.  
         * EndTime:备份结束时的时间戳
  3.  
         * Mode:备份模式。
  4.  
         * FULL:完全备份
  5.  
         * INCR:增量备份
  6.  
         * ARCH:归档WAL备份
  7.  
         * Data:读取数据文件的大小
  8.  
         * ArcLog:读取存档WAL文件的大小
  9.  
         * SrvLog:读取服务器日志文件的大小
  10.  
         * Total:备份大小(=书面大小)
  11.  
         * Compressed:备份是否已压缩
  12.  
         * TLI / CurTLI:PostgreSQL的时间轴ID
  13.  
         * ParentTLI:PostgreSQL的前时间轴ID
  14.  
         * Status:备份状态。可能的值是:
  15.  
         * OK:备份已成功完成并经过验证。
  16.  
         * DONE:备份成功完成。
  17.  
         * RUNNING:备份仍在运行。
  18.  
         * DELETING:正在删除备份。
  19.  
         * DELETED:备份已被删除。
  20.  
         * ERROR:备份期间发生一些错误。
  21.  
         * CORRUPT:备份不可用,因为它没有通过验证。
pg_rman show '2019-03-20 12:10:01'

 指定日期可以查看备份的详细信息

   
  
(4) 删除备份集
 按指定时间从catalog删除备份集
  例如我只需要我的备份集能恢复到2017-08-30 17:27:49,在这个时间点以前,不需要用来恢复到这个时间点的备份全删掉。但是会保留一次全备份。加上-f会强制删除
 
pg_rman delete "2017-08-30 17:27:49"

根据备份策略来删除备份集

  修改配置文件--- pg_rman.ini
  KEEP_DATA_GENERATIONS = 3   -- 备份集冗余度是3
  KEEP_DATA_DAYS = 10        -- 备份集保留日期是10d
 
(5) 清除备份集(删除已删除的备份)
  虽然delete命令从文件系统中删除了实际数据,但是仍然有一些已删除备份的目录信息,需要执行purge命令来删除。
pg_rman purge
 
(6) 备份恢复
  pg_rman将备份数据还原到目标数据库集群路径。
应该在恢复之前停止pg。此外,不要删除原始数据库集群,因为pg_rman必须从中检查时间轴ID或数据校验和状态。Restore命令将保存未归档的事务日志并删除所有数据库文件。您可以重试恢复,直到进行新备份。恢复文件后,pg_rman在中创建$PGDATA/recovery.conf。conf文件包含要恢复的参数,可以根据需要修改该文件。
  建议在恢复成功后尽快进行完整备份。
  如果--recovery-target-timeline未指定,则控制文件($PGDATA/global/pg_control)中的最后一个检查点的TimeLineID 将是还原目标。如果pg_control不存在,则还原使用的完整备份中的TimeLineID将是还原目标。
  指定时--recovery-target-time,请确保指定大于(或等于)要用作基础的完整备份的EndTime的时间戳。
 
  恢复时,需要注意,你可以选择原地恢复(覆盖式),或者使用新的$PGDATA作为恢复目标。
  但是请注意,不管是哪种恢复方式,如果在本机恢复的话,pg_rman可能会覆盖原有的数据文件,arch, pg_xlog目录中的文件,所以,如果你要保留原数据,建议先将原数据目录重命名。
  注:进行备份恢复之后,不能进行全量备份,需要进行增量备份
  • 原地恢复
  • 使用新的$PGDATA全恢复
  1.  
    # 需要删除$PGDATA下的文件
  2.  
    pg_rman restore
  3.  
     
  4.  
    # 必须要先停止postgresql 不然会报错 ERROR: PostgreSQL server is running
  5.  
     
  6.  
    # 恢复到指定时间戳:
  7.  
    pg_rman restore  --recovery-target-time "2019-02-15 13:56:45" --hard-copy
  8.  
     
  9.  
    # 根据xid 来恢复:
  10.  
    pg_rman restore  --recovery-target-xid 1821
 
  恢复之后,重启数据库:会出现以下内容:
此时数据库进入只读状态。
需要执行以下命令才能继续
select pg_wal_replay_resume();
 
(7) pg_rman.ini
参数配置文件 设置留存期
  1.  
    COMPRESS_DATA = YES
  2.  
    KEEP_ARCLOG_FILES = 7
  3.  
    KEEP_ARCLOG_DAYS = 7
  4.  
    KEEP_DATA_GENERATIONS = 3
  5.  
    KEEP_DATA_DAYS = 7
  6.  
    KEEP_SRVLOG_FILES = 7
  7.  
    KEEP_SRVLOG_DAYS = 7
 posted on 2020-12-01 17:15  xibuhaohao  阅读(1200)  评论(0编辑  收藏  举报