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);

這樣就完成了一個基礎的一次備份

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM