pgsql的備份和恢復:備份:
1.pg_dump:(sql轉儲,類似於mysql的binlog的dump,可以加上壓縮如gzip,可以設定壓縮級別)備份:pg_dump dbname > outfile
恢復:psql dbname < infile
outfile 和infile是同乙個檔案
2.pg_dumpall:(sql轉儲,匯出所有的db)
備份:pg_dumpall -f outfile
恢復:psql -f outfile postgres
archive(歸檔檔案):database manager 把query語句記錄在 archive檔案裡,archive檔案一般有多個,有固定大小.採取輪循的方式寫.然後到了觸發一定條件的時候,如:記錄了1個小時的query語句了或者寫滿了1/2的時候.就執行這些query語句並把結果寫到資料檔案裡.即記錄到硬碟中.1.要使用pitr,必須開啟pgsql的歸檔模式(archive)
在postgresql.conf檔案中,設定如下:
# - archiving -
archive_mode = on # allows archiving to be done
# (change requires restart)
archive_command = 'cp "%p" /usr/local/pgsql/backup/"%f"'
# command to use to archive a logfile segment
archive_timeout = 60 # force a logfile segment switch after this
# time; 0 is off
2.以postgres身份連線到pgsql
psql 要備份的dbname
3.發出備份命令
select pg_start_backup('label'); --> 備份archive檔案.
label --> 備份標籤,一般為放置備份檔案的全路徑.如: /usr/local/pgsql/backup
4.執行備份
用tar或者cpio備份資料檔案.此過程中,不用關閉資料庫,也不用斷開連線.
5.再以postgres身份連線到pgsql
select pg_stop_backup(); --> 終止備份archive檔案.
這將終止備份模式,並自動切換到下乙個歸檔檔案.這樣的好處是可以立即為下次備份做好準備.
4.pitr的即時恢復
1.停止pgsql服務
2.最好copy /usr/local/pgsql/data 到臨時位置,以防萬一.
3.清理掉data 檔案下所有檔案,如果用到tablespace,還得清掉表空間目錄下的所有檔案.
4.用正確的所有者恢復資料庫檔案.用postgres最好.
5.清理pg_xlog目錄裡的檔案.刪掉檔案,保留資料夾
6.copy archive檔案到pg_xlog資料夾下.
7.在集群資料目錄/usr/local/pgsql/data裡建立乙個恢復命令檔案recovery.conf。模版檔案recovery.conf.sample在tarball的src裡.
restore_cmd --> 恢復的命令
recovery_target_time -->宣告恢復到哪個時間戳
recovery_target_xid --> 宣告恢復到哪個事物id
recovery_target_inclusive --> 宣告是在恢復目標之前還是之後停止.
recovery_target_timeline --> 宣告恢復到乙個時間線.
還需要臨時修改 pg_hba.conf 以避免普通使用者連線,直到你確信恢復已經正常了為止。
8.所有這些操作的關鍵是設定乙個恢復命令檔案,這個檔案描述你希望如何恢復以及恢復應該走到**。
你可以使用 recovery.conf.sample(通常安裝在安裝目錄的 share/ 子目錄裡)作為原型。
你必須在 recovery.conf 裡面宣告的乙個東西是 restore_command ,它告訴系統如何拿回歸檔的 wal 檔案段。
類似 archive_command ,這個是乙個指令碼命令字串。它可以包含 %f ,這個變數會被需要的日誌檔名替換,以及 %p ,
它會被要拷貝去的日誌檔案的絕對路徑代替。如果需要在命令裡替換真正的 % 字元,那麼就雙寫(%%)。
最簡單的有用命令是類似下面的東西
restore_command = 'cp /mnt/server/archivedir/%f %p'這個命令將把以前歸檔的 wal 段從 /mnt/server/archivedir 目錄拷貝過來。
你當然可以使用某些更複雜的東西,甚至是乙個要求操作者掛載合適的磁帶的 shell 指令碼。
重要的一點是:該命令在失敗的時候返回非零值。如果日誌檔案沒有出現在規檔中,那麼該系統將詢問該命令;
在問到的時候,它必須返回非零。這個不是錯誤條件。還要注意 %p 路徑的基礎名將和 %f 不一樣;不要認為它們是可以互換的。
在歸檔中找不到的 wal 段將被認為在 pg_xlog/ 裡;這樣就允許使用最近沒有歸檔的段。
但是在歸檔中的段將比 pg_xlog/ 中的優先。在檢索歸檔檔案的時候,系統將不會覆蓋現有的 pg_xlog/ 內容。
通常,恢復將處理所有可用的 wal 段,因此將把資料庫恢復到當前時間(或者是在所給出的可用 wal 段數的情況下,
我們能走到的最近的地方)。但是如果你想恢復到某些以前的時刻點(比如,在菜鳥 dba 刪除你的主要事務表之前),
那麼只需要在 recovery.conf 裡宣告要求的停止點。你可以通過日期/時間來宣告,也可以通過特定事務 id 的結束來宣告這個停止點,
我們叫做"恢復目標"。目前,只有日期/時間選項比較有用,因為我們沒有工具來幫助你精確地標識應該使用哪個事務 id
【注意】請注意停止點必須在備份的終止時間之後(也就是 pg_stop_backup 的時間)。
你無法使用乙個基礎備份恢復到備份正在進行中的某個時刻。要想恢復到該時刻,你必須回到你以前的基礎備份,然後從那個位置向前滾動。
如果在恢復過程中發現在 wal 資料中存在錯誤,那麼恢復將在錯誤的地方停止,並且不會啟動伺服器。
在這種情況下,可以指定乙個位於錯誤點之前的"恢復目標",然後從起始點開始重新執行恢復程序,這樣恢復就可以正常完成。
如果由於外部原因(系統崩潰、無法讀取 wal 歸檔)導致恢復失敗,那麼可以簡單的重新啟動恢復過程即可,它將從上次失敗的地方繼續。
重新啟動恢復過程與檢查點的操作非常類似:
伺服器週期性的強制將其狀態記錄到磁碟上並更新 pg_control 檔案以標識已經處理的 wal 資料不需要被再次掃瞄。
pgsql的備份與恢復
在window上備份 1 在pgsql的bin目錄在開啟命令視窗。注 可以使用.pg dump 查詢相關引數含義 3 恢復資料 pg restore.exe host ip位址 port 埠號 username 使用者名稱 dbname 資料庫名稱 verbose 備份檔案 例 pg restore...
Pgsql和Mysql的對比
工作中用過這兩個資料庫,但都不是太深入,僅限於用而已,但給我留下的印象就是pgsql更好些,因為這兩個庫我都遇到過資料丟失的問題,前者我通過網上方法加自己的判斷有驚無險的恢復了,而後者搜尋各種資料加問身邊的專家都沒辦法。剛網上搜了一下兩者的區別,總體的感覺也是前者是最好的開源關聯式資料庫,而後者是網...
Pgsql和MySql的對比
工作中用過這兩個資料庫,但都不是太深入,僅限於用而已,但給我留下的印象就是pgsql更好些,因為這兩個庫我都遇到過資料丟失的問題,前者我通過網上方法加自己的判斷有驚無險的恢復了,而後者搜尋各種資料加問身邊的專家都沒辦法。剛網上搜了一下兩者的區別,總體的感覺也是前者是最好的開源關聯式資料庫,而後者是網...