pg_start_backup() 和 pg_stop_backup()



      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目录,但是是无法执行下次备份的。


BY 海无涯

你可能感兴趣的:(pg_start_backup,wal,xlog日志,PostgreSQL,Highgo,DB)