• PostgreSQL 使用PG_Rman进行物理备份


    背景


    在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下载:

    [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/bin
    export PG_RMAN=/usr/pgsql-9.6
    export 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_rman
    pg_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 purge
    
    Generic 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 init
    pg_rman: could not open file "/db/pgsql/data/global/pg_control" for reading: 没有那个文件或目录
    

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

    [root@out-pg ~]# pg_rman init
    ERROR: 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/
    总用量 8
    drwx------ 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 restart
    Restarting 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 5432
    INFO: copying database files
    INFO: copying archived WAL files
    INFO: 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/* -slh
    13G     /home/postgres/backup/20181123/142131
    7.0G    /home/postgres/backup/20181123/154458
    

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

    
    [root@out-pg backup]# pg_rman validate
    INFO: validate: "2018-11-23 14:21:31" backup and archive log files by CRC
    INFO: 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

  • 相关阅读:
    生产者消费者问题 一个生产者 两个消费者 4个缓冲区 生产10个产品
    三个线程交替数数 数到100
    c++ 字符串去重
    Java中一个方法只被一个线程调用一次
    GEF开发eclipse插件,多页编辑器实现delete功能
    python-arp 被动信息收集
    ssrf
    TCP
    xxe
    越权
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11114653.html
Copyright © 2020-2023  润新知