PostgreSQL技術(shù)大講堂 - 第41講:表空間備份與恢復(fù)
最新學(xué)訊:近期OCP認(rèn)證正在報(bào)名中,因考試人員較多請盡快報(bào)名獲取最近考試時(shí)間,報(bào)名費(fèi)用請聯(lián)系在線老師,甲骨文官方認(rèn)證,報(bào)名從速!
我要咨詢
PostgreSQL從小白到專家,是從入門逐漸能力提升的一個(gè)系列教程,內(nèi)容包括對PG基礎(chǔ)的認(rèn)知、包括安裝使用、包括角色權(quán)限、包括維護(hù)管理、、等內(nèi)容,希望對熱愛PG、學(xué)習(xí)PG的同學(xué)們有幫助,歡迎持續(xù)關(guān)注CUUG PG技術(shù)大講堂。
第41講:表空間備份與恢復(fù)
PostgreSQL第41講:1月13日(周六)19:30,釘釘群(35822460)& 視頻號(hào)(數(shù)據(jù)庫老陳)直播
內(nèi)容1:表空間備份與恢復(fù)的意義
內(nèi)容2:PostgreSQL表空間概念
內(nèi)容3:基于表空間備份
內(nèi)容4:基于表空間的完全恢復(fù)
表空間備份與恢復(fù)的意義
PostgreSQL數(shù)據(jù)庫備份所存在的問題:
1、PG備份工具備份的總是整個(gè)數(shù)據(jù)目錄,數(shù)據(jù)量大,備份時(shí)間長。
2、PG備份工具恢復(fù)時(shí)總是恢復(fù)整個(gè)數(shù)據(jù)目錄,數(shù)據(jù)量大,恢復(fù)時(shí)間長。
3、使用表空間的備份與恢復(fù),可以減少備份數(shù)據(jù),縮短備份與恢復(fù)的時(shí)間。
Tablespaces
· PostgreSQL中的表空間是基本目錄之外的附加數(shù)據(jù)區(qū)域,此功能已在版本8.0中實(shí)現(xiàn)。
· 初始化數(shù)據(jù)庫后默認(rèn)的表空間有pg_default、pg_global。
· pg_global表空間的物理文件位置在數(shù)據(jù)目錄的global目錄中,它用來保存系統(tǒng)表。
· pg_default表空間的物理文件位置在數(shù)據(jù)目錄的base子目錄中,是template0和template1數(shù)據(jù)庫的默認(rèn)表空間。
· 創(chuàng)建數(shù)據(jù)庫時(shí),默認(rèn)從template1數(shù)據(jù)庫進(jìn)行克隆,因此除非特別指定了新建數(shù)據(jù)庫的表空間,否則默認(rèn)使用template1使用的表空間,即pg_default表空間。
PostgreSQL表空間物理文件位置
創(chuàng)建表空間時(shí)產(chǎn)生的目錄命名規(guī)則:
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
· 如果在表空間下創(chuàng)建一個(gè)新的數(shù)據(jù)庫(OID是90209),那么它的目錄將在版本特定的子目錄下創(chuàng)建:
ls -l /home/postgres/tblspc/PG_12_201909212
total 4
drwxr-x---. 2 postgres postgres 4096 Mar 30 09:27 90209
· 在base目錄下創(chuàng)建的數(shù)據(jù)庫上創(chuàng)建新表指定到新建的表空間:
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 #在新表空間目錄下創(chuàng)建數(shù)據(jù)庫目錄
執(zhí)行pg_basebackup備份
示例
產(chǎn)生壓縮的tar包,-Ft參數(shù)指定:
pg_basebackup -D bk1 -Ft -z -P
此備份花的時(shí)間比較長,但是節(jié)省空間。支持表空間文件存放在其它目錄下。
產(chǎn)生跟源文件一樣的格式,即原樣格式,-Fp參數(shù)指定:
pg_basebackup -D bk2 -Fp -P
此備份方式很快,但是不節(jié)省空間。如果有表空間路徑放在其它目錄下,則備份失敗。
執(zhí)行表空間備份
示例
數(shù)據(jù)庫中執(zhí)行開始備份函數(shù)
select pg_start_backup('tbs');
使用tar命令進(jìn)行備份(備份tblspc表空間所在的目錄)
cp -rf /home/postgres/tblspc /home/postgres/bk1
cp $PGDATA/backup_lable /home/postgres/bk1
數(shù)據(jù)庫中執(zhí)行結(jié)束備份函數(shù)
select pg_stop_backup();
執(zhí)行一個(gè)基于表空間備份的完全恢復(fù)
PG支持基于表空間(除了pg_global之外)級別的完全恢復(fù),因?yàn)閜g_global表空間比較特殊,其中包括控制文件,而控制文件不能使用備份的進(jìn)行恢復(fù)。
1、轉(zhuǎn)儲(chǔ)備份的表空間目錄到目標(biāo)位置
cp -rf /backup/PG_12_201909212 /home/postgres/tblspc
2、轉(zhuǎn)儲(chǔ)backup_lable文件到$PGDATA目錄下
cp /backup/backup_lable $PGDATA
3、創(chuàng)建recovery.signal
4、修改postgresql.conf文件
restore_command = 'cp /home/postgres/archives/%f %p'
recovery_target_timeline = 'latest'
5、啟動(dòng)數(shù)據(jù)庫,表空間所包含的表能夠?qū)崿F(xiàn)完全恢復(fù)
pg_ctl start
總結(jié)
PostgreSQL數(shù)據(jù)庫支持表空間的備份與完全恢復(fù),不支持表空間下某個(gè)數(shù)據(jù)庫的備份與恢復(fù)。
備份與恢復(fù)時(shí)針對的是整個(gè)表空間所在的目錄。
執(zhí)行表空間恢復(fù)后數(shù)據(jù)庫正常使用,數(shù)據(jù)完整,證明表空間備份恢復(fù)是可行的。
CUUG PostgreSQL技術(shù)大講堂系列公開課第41講-表空間備份與恢復(fù),往期視頻及文檔,請聯(lián)系CUUG。
- 冉乃綱-老師CUUG金牌講師
- 冉老師 CUUG金牌講師 Oracle及RedHat高級講師、Unix/Linux 資深專家...[詳細(xì)了解老師]

- 陳衛(wèi)星-老師CUUG金牌講師
- 陳老師 CUUG金牌講師 精通Oracle管理、備份恢復(fù)、性能優(yōu)化 11年Ora...[詳細(xì)了解老師]
