【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========="