• PostgreSQL 全量 增量 归档 备份工具 pg_rman介绍与使用(转载)


    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
  • 相关阅读:
    git 命令速查及使用
    Centos6.5 LAMP环境源码包安装与配置,附安装包百度网盘地址 (转做笔记)
    不再为Apache进程淤积、耗尽内存而困扰((转))
    centos6.5 安装linux 环境
    window 配置wnmp(转下整理 ,全)
    mac下安装 xampp 无法启动apache (转,留用)
    Git命令行(转用于学习和记录)
    apache 局域网访问
    华为云GaussDB(for opengauss)如何绑定公网,实现putty的远程访问gaussdb数据库。
    Day9 打卡acwing.429 奖学金
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/14069510.html
Copyright © 2020-2023  润新知