PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色權限、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。
第38講:數據庫備份
PostgreSQL第38講:12月09日(周六)19:30,釘釘群直播,群號:35-82-24-60
內容1:備份術語
內容2:備份工具
內容3:備份模式
內容4:basebackup簡介
內容5:全庫備份
內容6:表空間備份
內容7:只讀數據庫備份
術語
全庫備份
目標數據庫處于打開或者關閉狀態
備份$PGDATA下所有的數據文件
部分備份
備份除了pg_global的其它表空間
一致性備份
不一致性備份
備份工具
使用操作系統命令對數據庫文件進行備份和恢復
使用pg_basebackup對數據庫文件進行備份
使用pg_rman對數據庫文件進行備份和恢復
備份模式
一致性備份(數據庫關閉)
備份$PGDATA目錄下所有文件
一致性全庫備份的好處
概念簡單
易于執行
需要很少的操作員交互
執行一致性全庫備份
數據庫打開模式下備份
數據庫打開模式下備份好處
保持高數據庫可用性
支持不間斷的業務運營
數據庫打開模式下備份要求
數據庫歸檔
· 歸檔日志
連續歸檔是在WAL段切換時將WAL段文件復制到歸檔區域的功能,由archiver(后臺)進程執行。其中,占位符%p是復制的WAL段,而%f是存檔日志。
ALTER SYSTEM SET archive_command = 'cp %p /home/postgres/archives/%f';
ALTER SYSTEM SET archive_mod = on;
執行數據庫打開模式下備份
· pg_basebackup 基本備份的標準過程如下所示:
(1) 執行pg_start_backup 命令?
(2) 使用tar/cp命令對$PGDATA目錄進行備份
(3) 執行pg_stop_backup 命令
pg_basebackup工作原理
· pg_start_backup執行以下四個操作
Force into the full-page wirte mode.
Switch to the current WAL segment file (version 8.4 or later).
Do checkpoint.
Create a backup_label file–此文件創建于base目錄的同一層,包含有關基本備份本身的基本信息,例如此檢查點的檢查點位置。
· backup_label文件包含如下內容
CHECKPOINT LOCATION –這是記錄此命令創建的檢查點的LSN位置。
START WAL LOCATION –這不與PITR一起使用,而是與流式復制一起使用。它被命名為“START WAL LOCATION”,因為處于復制模式的備用服務器在初始啟動時只讀取一次該值。
BACKUP METHOD–這是用于進行此基礎備份的方法。(pg_start_backup或pg_basebackup。)
BACKUP FROM –這顯示此備份是從主備份還是從備用備份。
START TIME –這是執行pg_start_backup時的時間戳。
LABEL –這是在pg_start_backup中指定的標簽。
START TIMELINE –這是備份開始的時間線。這是為了進行健全性檢查,并已在版本11中引入。
· pg_stop_backup
如果pg_start_backup強制更改了非整頁寫入模式,則將其重置為非整頁寫入模式。
寫一個備份結束的XLOG記錄。
切換WAL日志。
創建備份歷史文件–此文件包含備份標簽文件的內容和執行pg_stop_backup的時間戳。
刪除備份標簽文件–備份標簽文件是從基本備份恢復所必需的,一旦復制,就不必在原始數據庫群集中。
執行pg_basebackup備份
· 示例
產生壓縮的tar包,-Ft參數指定:
pg_basebackup -D bk1 -Ft -z -P
此備份花的時間比較長,但是節省空間。支持表空間文件存放在其它目錄下。
產生跟源文件一樣的格式,即原樣格式,-Fp參數指定:
pg_basebackup -D bk2 -Fp -P
此備份方式很快,但是不節省空間。如果有表空間路徑放在其它目錄下,則備份失敗。
執行用戶管理全庫備份
· 示例
數據庫中執行開始備份函數
select pg_start_backup('full');
使用tar命令進行備份
cd $PGATA
tar -zcf /backup/data.tar.gz .
數據庫中執行結束備份函數
select pg_stop_backup();
執行表空間備份
· 示例
數據庫中執行開始備份函數
select pg_start_backup('tbs');
使用tar命令進行備份(備份pg_default表空間所在的目錄)
cd $PGATA
tar -zcf /backup/base.tar.gz base
cp backup_lable /backup
數據庫中執行結束備份函數
select pg_stop_backup();
執行只讀數據庫備份
· 示例
把某個數據庫變成只讀
ALTER DATABASE new_db1 set default_transaction_read_only=on;
使用tar/cp命令進行備份(備份new_db1所在的目錄)
cd $PGATA/base
tar -zcf /backup/90195.tar.gz 90195
CUUG PostgreSQL技術大講堂系列公開課,往期視頻及文檔,請聯系CUUG客服。