postgres 基础备份-->pg_start_ backup与pg_stop_ backup (一)

一,备份须知

  备份前要保证开启了归档

  关于pg_start_ backup(摘:https://blog.csdn.net/pg_hgdb/article/details/78505641)  

 pg_start_backup() 和 pg_stop_backup()是postgreSQL提供的一种备份方式,由于无法并行备份,现在已经逐渐被pg_basebackup工具(postgresql9.1之后)所替代。
今天主要说一下,这两个命令做了什么工作。 pg_start_backup()
1、强制发生一次checkpoint点。 将未写到磁盘上的脏数据全部刷到磁盘上去。这样从这之后产生的日志就是记录整个数据块。可以“确保”恢复的正确性。 2、置写日志标志为:XLogCtl->Insert.forcePageWrites = true,这样wal日志将会记录整个数据块。避免了在进行备份时候(读操作——旧数据)持续向数据库写入数据(
写操作——新数据)造成的前后数据不一致。 细心的读者会发现我将“确保”恢复的正确性带上了引号,这是为什么呢? 想要知道为什么不能真正确保数据恢复正确性,首先应该了解,pg_start_backup()开启期间(不执行pg_stop_backup()),wal日志仍然会进行循环使用。从我们使用者的角度来看也许数据
库应该是持续的将数据块变化记录到wal中,备份不停止,wal日志也不应该被覆盖,但事实上并不是如此,也许是postgreSQL为了不至于太复杂和为了避免撑爆xlog日志,pg_start_backup()
开启期间wal仍会进行覆盖循环使用。 我们知道pg_start_backup() 和 pg_stop_backup()的使用是不需要开启归档的(强烈建议开启),那么在进行备份的时候,应该进行归档的一部分日志就会无法保存直接被覆盖掉,如果再想
恢复到“归档日志之后”的时间段数据也就会发生丢失。 所以说,对于归档日志,在存储允许的情况下,请务必使用! pg_stop_backup()相对而言就简单多了,它的作用就是结束此次备份状态,以便进行下次备份(非并发性备份),一直不执行pg_stop_backup()也并不会撑爆xlog目录,但是是无法执行下次
备份的。

二,开始备份

  01,执行pg_start_backup

postgres=# select pg_start_backup('labe_1',false,false);
 pg_start_backup
-----------------
 1/F8000060
(1 row)

postgres=# \q

   02,手工物理拷贝数据目录与元数据目录

[postgres@kafka01 data]$ ls
archive  backup  kingle_tbs  pgdata  postgres  psql[postgres@kafka01 data]$ tar cvf 20200608postgre.tar.gz ./kingle_tbs/ ./pgdata/ --exclude=./pgdata/postmaster.pid --exclude=./pgdata/postmaster.opts 
--exclude=./pgdata/log/*
./kingle_tbs/ ./kingle_tbs/PG_10_201707211/ ./kingle_tbs/PG_10_201707211/16387/ ./kingle_tbs/PG_10_201707211/16387/1255 ./kingle_tbs/PG_10_201707211/16387/1255_fsm ./kingle_tbs/PG_10_201707211/16387/1247 ./kingle_tbs/PG_10_201707211/16387/1247_fsm ./kingle_tbs/PG_10_201707211/16387/1249 ./kingle_tbs/PG_10_201707211/16387/1249_fsm ./kingle_tbs/PG_10_201707211/16387/1259 ./kingle_tbs/PG_10_201707211/16387/1259_fsm ./kingle_tbs/PG_10_201707211/16387/2604 ./kingle_tbs/PG_10_201707211/16387/2606 ./kingle_tbs/PG_10_201707211/16387/2611 ./kingle_tbs/PG_10_201707211/16387/2610 ............................................................. pgdata/postgresql.auto.conf ./pgdata/pg_ident.conf ./pgdata/logfile ./pgdata/postgresql.conf ./pgdata/log/ ./pgdata/pg_hba.conf ./pgdata/current_logfiles [postgres@kafka01 data]$ 现在就已经完成备份了

  03,停止pg_stop_backup

postgres=# select pg_stop_backup(false);

这样就完成了一个基础的一次备份

  

posted on 2020-06-08 14:01  kingle-l  阅读(1477)  评论(0编辑  收藏  举报

levels of contents