【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========="
经验分享 程序员 微信小程序 职场和发展