【PostgreSQL实战】之还原备份文件

【原创,转载请说明】

        本文讲述PostgreSql数据备份后的还原操作。上一篇讲到了在项目实战中,可采用PostgreSql自带工具pg_dump,结合shell以及定时任务来自动备份数据库文件。【PostgreSQL实战】之实现数据库自动备份

        其中备份pg_dump采用的其实为一逻辑备份,即将数据库以转储sql的方式备份出一sql文件来,我们根据日期进行了压缩。接下来我们结合pg_restore命令和shell脚本进行数据库的逻辑还原。

        还原的逻辑为在linux操作系统下,shell脚本中筛选出备份目录下的最新tar文件,并进行解压,解压完成后,采用pg_restore进行还原。

命令为:

pg_restore -Upostgres -d postgres  sql/psqldata.dump >> /dev/null 2>&1 &

-d:指定还原的数据库名称
-Upostgres: 指定用户为postgres,如不写则会默认为当前linux用户(root),如你pg中没有创建此用户则无法进行下一步咯。

 首先按照当前目录下的tar.gz压缩文件进行降序排列,即获取当前文件夹下的所有tar.gz文件,并对其排序:

##获取当前目录下的所有tar.gz文件
ls -lt pgsqldata*.tar.gz 

由于我们采用每天备份一次,即取第一行即为最后的备份,将其文件名取出。

ls -lt pgsqldata*.tar.gz | head -1

取第一行的最后一列即为文件名:

ls -lt pgsqldata*.tar.gz | head -1 | awk '{print $NF}
## | awk '{print $NF} 为取当前输入的最后一列

接下来运用pg_restore还原备份数据库即可。

此处默认还原最新的备份文件,如果想指定文件则可将其做为参数输入。完整脚本如下:

#!/bin/bash
DBDIR=/home/postgres/pgsql/bin/pg_restore
DBDUMPOUTDIR=/var/backup/sql/
DBUMPTARDIR=/var/backup/*.tar.gz 



#获取数据库密码,根据实际情况获取数据库密码,此处为读取一配置文件
getDbPasswd(){
export PGPASSWORD=` cat /mnt/syncdata/pg.cfg | grep DBPassword | awk -F "=" '{ print $2}'`
}

recoverDb(){
#解压目标文件
	pushd /var/backup
     ## 获取备份文件tar名称
	TARFILENAME=`ls -lt pgsqldata*.tar.gz | head -1 | awk '{print $NF}'`
	if [ -z $TARFILENAME ]; then
		echo "recover faild, because can not find recover file"
		exit 1
	fi
    ##将tar解压到指定文件夹下
	
	tar zxvf $TARFILENAME -C sql/
	
    ## 获取数据库密码
	getDbPasswd
	
	$DBDIR -Upostgres -d postgres  sql/psqldata.dump >> /dev/null 2>&1 &
	
	popd
	
}

if [ ! -d $DBDUMPOUTDIR ]; then
	mkdir -p $DBDUMPOUTDIR
fi

cd /var/backup
if [ -z `ls  -lt pgsqldata*.tar.gz` ]; then
	echo "recover faild,because recover file not exits"
	exit 1
fi


echo "============================================>"
echo "=========begin to recover pgsqldata========="	
recoverDb
if [[ $? -ne 0 ]]; then
	echo "=========recover pgsqldata faild========="
fi
echo "=========recover pgsqldata sucess========="

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值