標籤:style io ar os 使用 sp strong on 檔案
備份 PostgreSQL 資料有三種完全不同的方法:
· SQL 轉儲
· 檔案系統層級備份
· 線上備份
一、 SQL 轉儲
SQL轉儲是使用pg_dump應用工具將當前的資料區塊匯出為SQL檔案;當資料庫需要重建時,將該SQL檔案回饋給伺服器,恢複資料庫為重建時的資料庫狀態。
當備份整個資料庫叢集的時候可以使用pg_dumpall程式, pg_dumpall 備份給出的叢集中的每個資料庫,同時還確保保留象使用者和組這樣的全域資料狀態。
當資料庫中表的大小大於系統允許的最大檔案大小時,需要使用標準的UNIX工具解決該問題。
不足:
要獲得資料庫的超級使用者權限,在資料庫恢複時仍然要求這些許可權的存在。
在pg_dump啟動並執行時候對資料庫的更新將不會被轉儲。
二、 檔案系統層級的備份
直接拷貝PostgreSQL資料庫中用於存放資料庫資料的檔案。
方式:
“一致快照方式”
使用rsync執行檔案系統備份
不足:
在進行備份時必須關閉資料庫
資料庫分布在多個檔案系統上時,只有關閉資料庫足夠長的時間才能完整備份
轉儲後的檔案較大
三、 線上備份以及即時恢複
這種方式組合了系統備份與WAL檔案的備份,當需要恢複時,會先恢複檔案備份然後重放WAL檔案。
優點:
初始時並不需要完美的一致備份,因此不需要使用快照功能,tar或類似歸檔工具即可實現備份;
可以通過連續的備份WAL檔案歸檔來實現連續的Database Backup;
可以將資料庫恢複到開始備份以來的任意時刻的狀態;
要求:
只支援整個資料庫叢集的恢複;
要求大量的Archive Storage;
操作:
1、設定WAL歸檔
1)建立 WAL備份目錄,比如:d:\pg_xlog_archive
2)修改 postgresql.conf中的 archive_command 設定,比如:
archive_command = ‘copy "%p" d:\\pg_xlog_archive\\%f‘
註:%p要用雙引號括起來處理安裝目錄中有空格的情況。
archive_mode = on
wal_level=‘archive‘
在postgresql.conf檔案裡用archive_command 聲明shell命令用於將一個完整的段檔案拷貝到指定位置,在該shell命令中需要用%p表示要歸檔的檔案的絕對路徑, %f表示檔案名稱。
eg:archive_command = ‘cp -i %p /mnt/server/archivedir/%f </dev/null‘
歸檔命令要在運行PostgreSQL伺服器的同一個使用者的許可權下執行。另外,若且唯若歸檔命令運行成功時它才返回0。
注意:儘管 WAL 歸檔允許恢複任何對PostgreSQL資料庫的資料做的修改,在最初的基礎備份之後,它不會恢複對設定檔的修改(也就是說,postgresql.conf,pg_hba.conf和 pg_ident.conf),因為這些檔案都是手工編輯的,而不是通過 SQL操作來編輯的。所以你可能會需要把你的設定檔放在一個日常檔案系統備份過程即可處理到的地方。
2、進行基礎備份
1)確保 WAL歸檔開啟並且可以運轉。
2)以資料庫超級使用者身份串連到資料庫,發出命令 SELECT pg_start_backup(‘label‘);
這裡的 label 是任意你想使用的這次備份操作的唯一標識。(一個好習慣是使用你想把備份轉儲檔案放置的目的地的全路徑。) pg_start_backup用你的備份的資訊,在你的叢集目錄裡,建立一個備份標籤檔案,叫做 backup_label。
3)執行備份,使用任何方便的檔案系統工具,比如 tar或者 cpio。這些操作過程中既不需要關閉資料庫,也不希望關閉資料庫的操作。
4)再次以資料庫超級使用者身份串連資料庫,然後發出命令 SELECT pg_stop_backup();
5)只要在備份過程中使用的 WAL段檔案作為正常資料庫活動的一部份備份完畢,你的備份工作就完成了。
注意:要保證你的備份轉儲包括所有資料庫叢集目錄裡的檔案(比如,/usr/local/pgsql/data)以及資料表空間。
postgreSQLDatabase Backup與恢複技術比較