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

2020-04-28  本文已影响0人  William_a7f1

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
上一篇下一篇

猜你喜欢

热点阅读