增量備份 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- EXP增量備份
- Xtrabackup增量備份
- rman 增量備份恢復
- MySQL 定時增量備份MySql
- oracle資料庫備份之exp增量備份Oracle資料庫
- [20221020]奇怪的增量備份.txt
- PostgreSQL12中實現增量備份與任意時間點恢復SQL
- oracle 增量備份恢復驗證Oracle
- 【Xtrabackup】Xtrabackup全備、增量備份及恢復示例
- mysqldump全量備份+mysqlbinlog二進位制日誌增量備份MySql
- LINUX下ORACLE增量備份的步驟LinuxOracle
- 實戰-MySQL定時增量備份(2)MySql
- windows 全量+增量備份指令碼batWindows指令碼BAT
- 用增量備份來快速恢復dg
- oracle10g RMAN增量備份策略Oracle
- Postgresql 備份與恢復SQL
- 企業網盤伺服器資料異地備份、遠端備份、增量備份解決方案伺服器
- Jtti:sql server怎麼增量備份資料庫JttiSQLServer資料庫
- 【手摸手玩轉 OceanBase 163】發起增量備份
- postgresql資料庫怎麼備份SQL資料庫
- PostGreSql12.6的備份恢復SQL
- dg丟失歸檔,使用rman增量備份恢復
- postgresql備份與恢復資料庫SQL資料庫
- innobackupex備份mysql大資料(全量+增量)操作記錄MySql大資料
- [20221028]rman使用tape與增量備份測試2.txt
- Longhorn+K8S+KubeSphere雲端資料管理,實戰 Sentry PostgreSQL 資料卷增量快照/備份與還原K8SSQL
- PostgreSQL 13–改進後的基礎備份SQL
- PostgreSql資料庫的備份和恢復SQL資料庫
- postgresql從入門到精通教程 - 第36講:postgresql邏輯備份SQL
- 基於percona xtrabackup 2.4.14的增量備份恢復還原mysql 5.6MySql
- 東商專案mysql例項庫(dingding)增量備份的實現MySql
- PostgreSQL備份恢復管理器pg_probackupSQL
- 使用RMAN增量備份處理Dataguard因歸檔丟失造成的gap
- postgresql物理備份工具pg_rman的使用詳解SQL
- PostgreSQL 13支援增量排序(Incremental Sorting)SQL排序REM
- PostgreSQL邏輯備份pg_dump使用及其原理解析SQL
- PostgreSQL13.7的安裝與主從搭建以及備份方法SQL
- PostgreSQL備機checkpointSQL
- PostgreSQL,SQLServer邏輯增量(通過邏輯標記update,delete)同步到Greenplum,PostgreSQLSQLServerdelete