天天看點

postgres備份和恢複 ---邏輯備份

1、
PostgreSQL為這個用途提供了pg_dump工具。 
這條指令的基本用法是: 
pg_dump dbname > outfile

從轉儲中恢複:
psql dbname < infile

pg_dump和psql可以通過管道讀寫,這樣我們就可能從一台主機上将資料庫轉儲到另一台主機上,比如: 
pg_dump -h host1 dbname | psql -h host2 dbname

pg_dump在一個時間隻轉儲一個單獨的資料庫, 它不轉儲有關角色或表空間資訊(因為這些是叢集範圍,而不是每個資料庫)。 為了支援 友善轉儲整個資料庫叢集的全部内容。 是以我們提供了pg_dumpall程式。這個指令的基本用法是: 
pg_dumpall > outfile
pg_dumpall > /opt/pgsql-9.4.4/data/all.dump
生成的轉儲可以用psql恢複: 
psql -f infile -d postgres
psql -f /opt/pgsql-9.4.4/data/all.dump -d postgres

當建立大的pg_dump輸出檔案時,限制産生問題的一些作業系統允許最大檔案大小。 因為pg_dump輸出到标準輸出, 你可以用标準的Unix工具繞開這個問題:有一些可能的方法:
使用壓縮轉儲. 使用你熟悉的壓縮程式(比如gzip): 
pg_dump dbname | gzip > filename.gz
使用下面指令恢複: 
gunzip -c filename.gz | psql dbname
或者: 
cat filename.gz | gunzip | psql dbname
使用split. split允許用下面的方法把輸出分解成作業系統可以接受的大小。 比如,讓每個塊大小為1MB: 
pg_dump dbname | split -b 1m - filename
用下面指令恢複: 
cat filename* | psql dbname
使用pg_dump自定義轉儲格式. 如果PostgreSQL是在一個安裝了zlib 壓縮庫的系統上制作的, 那麼自定義轉儲格式将在寫入輸出檔案的時候壓縮資料。 它會生成和使用gzip類似大小的轉儲檔案,但是還附加了一個優點: 你可以有選擇地恢複庫中的表。下面的指令用自定義轉儲格式轉儲一個資料庫: 
pg_dump -Fc dbname > filename
自定義格式的轉儲不是腳本,不能用于psql,而是需要使用pg_restore轉儲。 比如: 
pg_restore -d dbname filename
請參閱pg_dump和pg_restore手冊擷取細節。 
對于非常大的資料庫,你可能需要結合split以及其他兩種方法之一。
使用pg_dump的并行轉儲功能. 為了加快大資料庫的轉儲,你可以使用pg_dump并行模式。這将同時轉儲多個表。你可以使用-j參數控制并行性程度。并行轉儲隻支援"目錄"歸檔模式。 
pg_dump -j num -F d -f out.dir dbname