首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres 9.4还原不工作

Postgres 9.4还原不工作
EN

Stack Overflow用户
提问于 2015-11-19 05:33:46
回答 1查看 1.2K关注 0票数 1

我按照WAL归档的postgres文档备份PostgreSQL9.4数据库。

备份后,我在DB中创建2条记录。

现在,当我试图恢复DB时,上面创建的最后两个记录不会出现。

WAL归档步骤:

代码语言:javascript
运行
复制
cd /etc/postgresql/9.4/
mkdir archives
mkdir backups
chown postgres:postgres archives
chown postgres:postgres backups
cd /etc/postgresql/9.4/main/
echo 'max_wal_senders=1' >> postgresql.conf
echo 'wal_level=hot_standby' >> postgresql.conf
echo 'archive_mode=on' >> postgresql.conf
echo "archive_command='test ! -f /etc/postgresql/9.4/archives/%f && cp %p /etc/postgresql/9.4/archives/%f'" >> postgresql.conf
echo 'local replication postgres trust' >> pg_hba.conf
service postgresql restart

备份步骤:

代码语言:javascript
运行
复制
cd /etc/postgresql/9.4/backups
rm -rf *
pg_basebackup --xlog -U postgres --format=t -D /etc/postgresql/9.4/backups/

还原步骤:

代码语言:javascript
运行
复制
 service postgresql stop
 cd /var/lib/postgresql/9.4/
 if [ ! -d "/var/lib/postgresql/9.4/tmp/" ]
 then
    mkdir tmp
  else
    rm -rf tmp
  fi
  mkdir tmp
   mv /var/lib/postgresql/9.4/main/* /var/lib/postgresql/9.4/tmp/
  cd /var/lib/postgresql/9.4/main/
  rm -rf *
   cd /etc/postgresql/9.4/backups
  tar -xf base.tar -C /var/lib/postgresql/9.4/main/
 cd /var/lib/postgresql/9.4/main/

 FROMDIR="/etc/postgresql/9.4/archives/"

 TODIR="/var/lib/postgresql/9.4/tmp/pg_xlog/"

 if [ ! -d "$FROMDIR" ]
 then
      echo "Directory $FROMDIR does not exist!!"
 exit
 fi


 if [ ! -d "$TODIR" ]
 then
        echo "Directory $TODIR does not exist!!"
        exit
  fi

  cd $FROMDIR

  for i in `find . -type f`
      do
         if [ ! -f $TODIR/$i ]
      then
      echo "copying file $i"
      cp $i /var/lib/postgresql/9.4/main/pg_xlog/$i
      fi

     done

   cd /var/lib/postgresql/9.4/main/pg_xlog/

   chown -R postgres:postgres *

   cd /var/lib/postgresql/9.4/main/

   FILE="recovery.done"

   if [ -f $FILE ]
   then
          mv $FILE recovery.conf
   else
         echo "restore_command = 'cp /etc/postgresql/9.4/archives/%f %p'" >> recovery.conf
   fi

   su postgres service postgresql start

   exit
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 09:18:51

在填充当前的WAL段(通常为16 Mb)时,归档文件(/etc/postgresql/9.4/ filled /在您的情况下)中会出现更改。让我引用文档的话

只对已完成的WAL段调用archive_command。因此,如果您的服务器生成少量的WAL通信量(或者在它这样做的情况下有空闲时间),那么在完成事务和在归档存储中安全记录事务之间可能会有很长的延迟。要限制未存档数据的历史,可以设置archive_timeout强制服务器定期切换到新的WAL段文件。当此参数大于零时,服务器将切换到一个新的段文件,而自上一段文件切换以来已经过了这么多秒,并且有任何数据库活动,包括一个检查点。(增加checkpoint_timeout将减少空闲系统上不必要的检查点。)请注意,由于强制切换而提前关闭的归档文件仍然与完全完整的文件相同。因此,使用非常短的archive_timeout是不明智的-它将膨胀您的存档存储。

如果您只想测试还原过程,可以在创建一些记录以强制切换到新的WAL段之后执行select pg_switch_xlog();。然后验证存档目录中是否出现了一个新文件。

另外,您不需要将文件从归档目录复制到pg_xlog/。Restore_command会为你做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33795975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档