postgresql之pg_start_backup和pg_stop_backup

1、pg_start_backup

查看該函數的定義:

postgres=# \df pg_start_backup  

                                                      List of functions

 Schema   |      Name       | Result data type |                          Argument data types                           | Type  

------------+-----------------+------------------+------------------------------------------------------------------------+------

pg_catalog | pg_start_backup | pg_lsn           | label text, fast boolean DEFAULT false, exclusive boolean DEFAULT true | func

(1 row)

參數介紹:

第一個參數label:用來唯一標識此備份操作的任何字符串。

第二個參數fast:設置是否爲快速執行,默認爲false,將會做一個schedule checkpoint,把髒數據刷到磁盤。這裏會等待其他checkpoint結束,有時候會等一下;如果設置爲true,會盡快執行checkpoint,可能會產生大量的IO,拖慢正在執行的SQL;

第三個參數:是否是exclusive模式,既是否爲獨佔模式;默認爲true,如果設置爲false,則在調用pg_stop_back時,需要指定獨佔模式爲false,且將返回備份標籤文件裏面的內容。

 

執行pg_start_backup:

postgres=# select * from pg_walfile_name_offset(pg_start_backup('%s', true));
        file_name         | file_offset 
--------------------------+-------------
 000000010000000200000003 |          40
(1 row)

那麼pg_start_backup做了什麼呢?

如果pg_start_backup設置爲獨佔模式(默認是),將會把開始備份的LSN和checkpoint信息記錄到標籤

文件backup_label中。同時,如果有表空間鏈接,也會記錄一個tablespace_map。如果是no-exclusive

模式,則不會記錄,這些信息會在執行pg_stop_back時返回。

backup_label的備份標籤文件,其中包含關於備份的信息,包括開始時間和標籤字符串。

#cat backup_label 
START WAL LOCATION: 2/3000028 (file 000000010000000200000003)
CHECKPOINT LOCATION: 2/3000060
BACKUP METHOD: pg_start_backup
BACKUP FROM: master
START TIME: 2020-05-08 03:10:40 UTC
LABEL: %s
START TIMELINE: 1

問:

① pg_start_backup會不會switch一個新的wal文件呢?會不會把歸檔日誌做完歸檔呢?有沒有必要?

不會,不會,沒有必要。

② 在做完pg_start_backup後,直接拷貝數據庫data文件進行恢復可以嗎?

在此時拷貝數據庫data文件進行恢復可能會失敗,因爲備份的數據可能不是在一致性下,

數據文件的刷盤不可能同時完成。單純恢復到checkpoint點應該可以,但是,只有一個備

份文件是無法這樣回退恢復的。

因此,還需要獲取到從startbackup到stopbackup之間的wal日誌,以拷貝的data目錄+這段wal日誌進行恢復,即可恢復成功。這也是pg_basebackup的邏輯。

2、pg_stop_backup

pg_stop_backup則是將日誌模式恢復正常,並且切換wal,刪除data目錄下的備份日誌文件,返回結束的

LSN或者備份標記信息。

查看該函數的定義:

postgres=# \df pg_stop_backup

                                                                           List of functions

 Schema   |      Name      | Result data type |                                                Argument data types                                                | Type  

------------+----------------+------------------+-------------------------------------------------------------------------------------------------------------------+------

pg_catalog | pg_stop_backup | pg_lsn           |                                                                                                                   | func

pg_catalog | pg_stop_backup | SETOF record     | exclusive boolean, wait_for_archive boolean DEFAULT true, OUT lsn pg_lsn, OUT labelfile text, OUT spcmapfile text | func

(2 rows)

第二條記錄:

參數定義:

第一個參數:是否是exclusive模式,同pg_start_backup,pg_stop_backup常指定獨佔模式爲false,則將返回備份標籤文件裏面的內容。

第二個參數wait_for_archive :是否等待archive完成,默認是true。如果數據庫啓用了archive_mode,那麼pg_stop_backup在最後一個段被存檔之前不會返回。因爲您已經配置了archive_command,所以會自動對這些文件進行歸檔。如果需要不等待archive,將第二個參數設置爲false。

postgres=# select lsn from pg_stop_backup(true,false);
    lsn    
-----------
 2/7000448
(1 row)
                                                       ^
postgres=# select file_name from pg_walfile_name_offset('2/7000448'::pg_lsn);
        file_name         
--------------------------
 000000010000000200000007
(1 row)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章