一,备份须知
备份前要保证开启了归档
关于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);
这样就完成了一个基础的一次备份