美文网首页
Postgresql备份方式(简单易懂版)

Postgresql备份方式(简单易懂版)

作者: William_a7f1 | 来源:发表于2020-04-28 13:34 被阅读0次

    1. 逻辑备份与恢复

    例子:假如存在一个叫netdata的数据库,我们要对具体的这个数据库进行一个备份与恢复全过程。如下

    (1)以普通格式导出到/opt路径下
             pg_dump -Fc -U postgres netdata > /opt/netdata_2020-4-7.dump
    (2)在需要恢复的数据库系统中创建netdata数据库
             CREATE DATABASE netdata;
    (3)数据库恢复
              pg_restore -d netdata < /opt/netdata_2020-4-7.dump
              (如果远程恢复的话需要加-h “远程地址” -U “数据库用户” 这两个参数)
    

     

    2. 物理备份

    冷备份与恢复(数据迁移)
    (1)先停库 pg_ctl -D $PADATA stop 
    
    (2)用cp、tar等指令复制到某一个文件夹
    
    (3)修改环境变量的$PADATA路径
    
    (4)指定复制数据所在的路径启动,一定要具体指定到目录名为data的目录下
    

     

    热备份与恢复

    备份:

    PostgreSQL热备份的过程一般为:  
        (1)数据库中执行:pg_start_backup() 。
       
         (2) 然后使用操作系统的tar或 cp命令拷贝 PostgreSQL数据文件。
        可以手动执行这些命令,也可以在postgresql.conf文件里配置
        archive_mode、archive_command、wal_level三个参数,使其自动执行命令,如下:
             archive_mode = on
             archive_command = 'cp -i %p /home/postgres/archive/%f'
             wal_level = archive
        
          (3) 数据库中执行:pg_stop_backup()  。
    

    恢复:

    1. 停掉数据库
        pg_stop;
     
    2. 删除/data/
        rm –r /home/postgres/data/       #数据文件是放在/home/postgres/data/
       #若这个时候启动数据pg_start; 启动是成功的;不会报错!这个跟oracle是不同的;启动日志也不会出现error的错误提示;
     
    3. 恢复备份
        cp backup/hotback.tar.gz ./
        tar -zxvf hotback.tar.gz 
     
    4. 删除pg_xlog文件夹并重建
       rm -rf pg_xlog 
       mkdir -p pg_xlog/archive_status
     
    5. 拷贝recovery.conf文件并修改
       vim /data/pgdata/recovery.conf
        --新增内容,指定恢复文件和路径,%f,%p见上面说明
      restore_command = 'cp /home/postgres/archive/%f "%p"' 
     
    6. 启动数据库
      #pg_start;
    

     
    下面提供自动热备份脚本:

    ##===========================================================
    ##   pg_hot_back.sh
    ##   created by lottu
    ##   //
    ##   usage: pg_hot_back.sh
    ##============================================================
    #!/bin/bash
    DATE=`date +%Y%m%d`;
    PG_ARCHIVE=/home/postgres/archive/
    PG_DATA=/home/postgres/data/
    PG_HOME=/home/postgres
    BACK_LOG=/home/postgres/log/hot_${DATE}.log
     
    #START BACKUP
    echo "START BACKUP..............." > $BACK_LOG
    psql postgres -c "select pg_start_backup('hot_back')" >> $BACK_LOGcd $PG_HOME
    tar -zcvf ${PG_HOME}/backup/pg_back_${DATA}.tar.gz data/ >> $BACK_LOG
    psql postgres -c "select pg_stop_backup()" >> $BACK_LOG
    psql postgres -c "select pg_switch_wal()" >> $BACK_LOG   #有的postgresql版本是pg_switch_xlog()
    psql postgres -c "select pg_current_wal_lsn()" >> $BACK_LOG   #有的postgresql版本是pg_current_xlog_location()
    echo "BACKUP  END" > $BACK_LOG
    

    相关文章

      网友评论

          本文标题:Postgresql备份方式(简单易懂版)

          本文链接:https://www.haomeiwen.com/subject/nosvwhtx.html