PostgreSQL從小白到高手教程 - 第41講:postgres表空間備份與恢復

unix_5359發表於2024-01-12
PostgreSQL從小白到高手教程 - 第41講:postgres表空間備份與恢復


PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色許可權、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。


第41講:表空間備份與恢復


PostgreSQL第41講:1月13日(週六)19:30,釘釘群(35822460)& 影片號(資料庫老陳)直播

內容1:表空間備份與恢復的意義

內容2:PostgreSQL表空間概念

內容3:基於表空間備份

內容4:基於表空間的完全恢復


表空間備份與恢復的意義

PostgreSQL資料庫備份所存在的問題:

1、PG備份工具備份的總是整個資料目錄,資料量大,備份時間長。

2、PG備份工具恢復時總是恢復整個資料目錄,資料量大,恢復時間長。

3、使用表空間的備份與恢復,可以減少備份資料,縮短備份與恢復的時間。


Tablespaces

· PostgreSQL中的表空間是基本目錄之外的附加資料區域,此功能已在版本8.0中實現。

· 初始化資料庫後預設的表空間有pg_default、pg_global。

· pg_global表空間的物理檔案位置在資料目錄的global目錄中,它用來儲存系統表。

· pg_default表空間的物理檔案位置在資料目錄的base子目錄中,是template0和template1資料庫的預設表空間。

· 建立資料庫時,預設從template1資料庫進行克隆,因此除非特別指定了新建資料庫的表空間,否則預設使用template1使用的表空間,即pg_default表空間。


PostgreSQL表空間物理檔案位置

PostgreSQL從小白到高手教程 - 第41講:postgres表空間備份與恢復


建立表空間時產生的目錄命名規則:

PG _ 'Major version' _ 'Catalogue version number'

例如:

sampledb=# create tablespace new_tblspc location '/home/postgres/tblspc';

$ ls -l /home/postgres/tblspc/

total 4

drwx------ 4 postgres postgres PG_12_201909212


新建表空間的目錄由pg_tblspc子目錄中的軟連結定址,連結名與表空間的OID值相同。

postgres=# select oid,spcname from pg_tablespace;

oid | spcname

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

1663 | pg_default

1664 | pg_global

90208 | new_tblspc

(3 rows)

$ ls -l $PGDATA/pg_tblspc/

total 0

lrwxrwxrwx. 1 postgres postgres 90208 -> /home/postgres/tblspc


· 如果在表空間下建立一個新的資料庫(OID是90209),那麼它的目錄將在版本特定的子目錄下建立:

ls -l /home/postgres/tblspc/PG_12_201909212

total 4

drwxr-x---. 2 postgres postgres 4096 Mar 30 09:27 90209

· 在base目錄下建立的資料庫上建立新表指定到新建的表空間:

testdb=# create table test1 (id int) tablespace new_tblspc;

testdb=# SELECT pg_relation_filepath('test1');

pg_relation_filepath

---------------------------------------------

pg_tblspc/90208/PG_12_201909212/16385/90210 #在新表空間目錄下建立資料庫目錄


執行pg_basebackup備份

示例

產生壓縮的tar包,-Ft引數指定:

pg_basebackup -D bk1 -Ft -z -P

此備份花的時間比較長,但是節省空間。支援表空間檔案存放在其它目錄下。

產生跟原始檔一樣的格式,即原樣格式,-Fp引數指定:

pg_basebackup -D bk2 -Fp -P

此備份方式很快,但是不節省空間。如果有表空間路徑放在其它目錄下,則備份失敗。


執行表空間備份

示例

資料庫中執行開始備份函式

select pg_start_backup('tbs');

使用tar命令進行備份(備份tblspc表空間所在的目錄)

cp -rf /home/postgres/tblspc /home/postgres/bk1

cp $PGDATA/backup_lable /home/postgres/bk1

資料庫中執行結束備份函式

select pg_stop_backup();


執行一個基於表空間備份的完全恢復

PG支援基於表空間(除了pg_global之外)級別的完全恢復,因為pg_global表空間比較特殊,其中包括控制檔案,而控制檔案不能使用備份的進行恢復。

1、轉儲備份的表空間目錄到目標位置

cp -rf /backup/PG_12_201909212 /home/postgres/tblspc

2、轉儲backup_lable檔案到$PGDATA目錄下

cp /backup/backup_lable $PGDATA

3、建立recovery.signal

4、修改postgresql.conf檔案

restore_command = 'cp /home/postgres/archives/%f %p'

recovery_target_timeline = 'latest'

5、啟動資料庫,表空間所包含的表能夠實現完全恢復

pg_ctl start


總結

PostgreSQL資料庫支援表空間的備份與完全恢復,不支援表空間下某個資料庫的備份與恢復。

備份與恢復時針對的是整個表空間所在的目錄。

執行表空間恢復後資料庫正常使用,資料完整,證明表空間備份恢復是可行的。

CUUG PostgreSQL技術大講堂系列公開課第41講-表空間備份與恢復,往期影片及文件,請聯絡CUUG。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/31544987/viewspace-3003615/,如需轉載,請註明出處,否則將追究法律責任。

相關文章