增量備份 PostgreSQL
增量備份 PostgreSQL[@more@]
一、介紹
PITR 的全稱是 Point In Time Recovery, 它結合檔案系統級備份 WAL 日誌檔案, 達
到增量備份 PostgreSQL 資料庫系統.
WAL 的全稱是 Write Ahead Log, 它記錄著資料庫修改資料檔案的每一個動作. 如果
系統掛了, 讀入這些日誌檔案可以很方便快捷安全的恢復資料.
要知道的是, PITR 備份不只是備份一張或幾張表, 它是完全的備份, 不管是表、儲存
過程等. 它幾乎是把原來的資料庫系統做了一次克隆. 也就是說, 這種備份讓我們無需
關心資料庫系統中有幾個資料庫, 每個資料庫中又有些什麼資料, 不用像 pg_dump 要
指定資料庫名稱, 也不用像 slony 那樣在配置檔案中指定表, 還得是有主鍵的表.
別幻想什麼東西都是十全十美的, PITR 不是全能的. 它不能做 "高可用", 即 Master
和 Slave 的東東, 它也不能做 "負載均衡". 如果你一定要這些東西, 可以配合其他軟
件實現.
OK, 嘮叨許多廢話. 嗯... 說明你很有耐心, 呵呵!!!
二、設定及操作
實現 PITR 備份方案, 接下來我們說說設定、備份及恢復.
* 設定
建立備份目錄. 備份分基線 (baseline) 和日誌備份, 所以我們要建立兩個目錄:
mkdir -p /opt/bubase
mkdir -p /opt/buxlog
接著我們設定一些環境變數及備份所在目錄:
export PGDATA=/home/postgres/pgdata
export BUBASE=/opt/bubase
export BUXLOG=/opt/buxlog
設定完上面那些變數後, 編輯 $PGDATA/postgresql.conf 檔案, 設定如下:
archive_mode = on
archive_command = 'cp %p /opt/buxlog/%f'
OK, 所有設定都完成了, 啟動或重啟 PostgreSQL 服務.
* 備份
備份是有順序的, 先做基線備份, 然後備份日誌.
基線備份命令如下:
psql -d template1 -c "select PG_START_BACKUP('backup baseline')"
cp -R $PGDATA/* $BUBASE
psql -d template1 -c "select PG_STOP_BACKUP()"
基線備份好後, 就可以時不時的備份日誌了, 命令如下:
cp -R $PGDATA/pg_xlog/* $BUXLOG
日誌備份儘可能的頻繁一些. 因為當線上提供服務的所在磁碟壞掉, 而你又沒有備份
WAL 日誌, 你會丟資料.
* 恢復
哎呀, 線上提供服務的 PostgreSQL 宕了。不怕、不怕, 我們這不是有備份嘛, 嚯嚯!
嘎嘎, 不小心又弄來一臺新機器(YY 中... 假設一下啦), 那我們把 baseline 的備份
弄過來, 不管你用哪種方法. 擬定也放在 /home/postgres/pgdata 目錄下.
接著呢, 為了避免恢復還響應連線請求什麼的, 我們把服務只開啟本地連線, 修改
$PGDATA/postgresql.conf 檔案:
listen_addresses = 'localhost'
再下來, 在 $PGDATA 目錄下建立一個 recovery.conf 檔案. PostgreSQL 啟動的時候
如果發現 $PGDATA 目錄裡面有這個檔案就會進入恢復模式, 恢復完後會把這個檔案重
命名為 recovery.done. 檔案內容只有一行, 如下:
restore_command='cp /opt/buxlog/%f %p'
注意這裡是單引號, 別用雙引號, 不然會提示錯誤.
關鍵時刻了, 啟動資料庫:
pg_ctl start -D $PGDATA -l /tmp/pg.log
這個時候觀察 /tmp/pg.log 檔案, 會發現正在恢復一堆一堆、一坨一坨的 WAL 日誌文
件。
最後, 恢復完後, 再把 $PGDATA/postgresql.conf 檔案中的 listen_addresses 改回
原來的模樣。重啟:
pg_ctl restart -D $PGDATA -l /tmp/pg.log
嚯嚯, 大功告成!!!
四、指令碼化及自動化
個人覺著這些步驟還是很繁瑣的, 可以編寫個什麼指令碼之類的, 把指令碼放進 crontab
裡面, 較比的省心.
指令碼如何寫, 我就不獻醜了. 不過, 這裡需要說明一下的是, baseline 備份的頻繁度
會影響你恢復的速度. 為什麼這麼說呢, 因為每次備份 baseline, 恢復的時候也就恢
復這次備份 baseline 以後的所有修改資料庫資料檔案的 WAL 就可以了,相信這是很
好理解的.
以上所有的設定或測試都是基於 PostgreSQL 8.3.1 版本的.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9697/viewspace-1010448/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle之差異增量備份與累積增量備份Oracle
- Mysql增量備份MySql
- Oracle的差異增量備份和累積增量備份Oracle
- Oracle的差異增量備份和累積增量備份(zt)Oracle
- rman備份和增量備份指令碼指令碼
- Backup And Recovery User's Guide-RMAN備份概念-增量備份-累積增量備份GUIIDE
- Backup And Recovery User's Guide-RMAN備份概念-增量備份-差異增量備份GUIIDE
- Backup And Recovery User's Guide-RMAN備份概念-增量備份-多級增量備份GUIIDE
- Oracle RMAN 增量備份Oracle
- Backup And Recovery User's Guide-RMAN備份概念-增量備份-增量備份演算法GUIIDE演算法
- 完全備份、差異備份、增量備份的區別
- XtraBackup完整備份與增量備份的原理
- Oracle 11g RMAN備份-增量備份Oracle
- Backup And Recovery User's Guide-RMAN備份概念-增量備份-累積增量備份-練習GUIIDE
- MySQL 定時增量備份MySql
- rman增量備份指令碼指令碼
- oracle資料庫備份之exp增量備份Oracle資料庫
- postgresql備份方式SQL
- Backup And Recovery User's Guide-建立和更新增量備份-增量更新備份GUIIDE
- 使用innobackupex線上增量備份和再增量備份及恢復mysql資料庫MySql資料庫
- 【RMAN】使用增量備份更新資料庫備份映象資料庫
- RMAN說,我能備份(9)--RMAN增量備份與備份保留策略
- mysql innobackupex增量備份恢復MySql
- 【MySql】innobackupex 增量備份的bugMySql
- Backup And Recovery User's Guide-建立和更新增量備份-進行增量備份GUIIDE
- Backup And Recovery User's Guide-建立和更新增量備份-增量備份的目的GUIIDE
- mysql之 Innobackupex(全備+增量)備份恢復MySql
- Postgresql 備份恢復SQL
- Backup And Recovery User's Guide-建立和更新增量備份-規劃增量備份策略GUIIDE
- oracle 增量備份恢復驗證Oracle
- 【MySql】innobackupex增量備份和恢復MySql
- HBase 增量備份和還原工具
- MySQL增量備份的指令碼(innobackupex)MySql指令碼
- 【MySql】innobackupex 增量備份和恢復MySql
- 兩種增量備份的區別!
- Backup And Recovery User's Guide-RMAN備份概念-增量備份GUIIDE
- oracle聯機熱備份的原理,及rman增量備份原理Oracle
- Oracle聯機熱備份的原理及rman增量備份原理Oracle