pg單機自動化日志備份系列一

本系列主要是介紹基于pg10版本的日志備份技術悠夯,如何實現(xiàn)自動日志備份(主要是筆者業(yè)務上有這種功能,嘗試了幾天幾夜疗疟,特此記錄下)瞳氓,本篇文章是基礎篇,主要介紹pg的幾種數(shù)據(jù)備份方式店诗。

如果你已經熟悉音榜,可以看pg單機自動化日志備份系列二

一、pg_dump
) 和 pg_restore

?以下描述摘自官方文檔

pg_dump是一個用于備份PostgreSQL 數(shù)據(jù)庫的工具擦囊。
它甚至可以在數(shù)據(jù)庫正在使用的時候進行完整一致的備份嘴办。 pg_dump并不阻塞其它用戶對數(shù)據(jù)庫的訪問(讀或者寫)

pg_restore用于恢復由pg_dump 轉儲的任何非純文本格式中的PostgreSQL數(shù)據(jù)庫。
它將發(fā)出必要的命令重建數(shù)據(jù)庫涧郊,并把它恢復成轉儲時的樣子。 歸檔(備份)文件還允許pg_restore有選擇地進行恢復彤灶, 甚至在恢復前重新排列條目的順序.

? 描述已經說了兩者大概功能批旺,筆者平時也用pg_dump + psql 進行一些數(shù)據(jù)的轉移,但是從使用心得來看汽煮,pg_dump每次備份就相當于全量備份,所以進行數(shù)據(jù)恢復時搬卒,也不能恢復到某一個時間點的數(shù)據(jù)翎卓,所以不采用pg_dump + pg_restore 進行自動化日志備份。(由使用pg_dump需求的同學坯门,請自行去查閱官方文檔)

? 然后pg_dump每次只轉儲一個數(shù)據(jù)庫,如果有更高的需求古戴,可以看看pg_dumpall

二肃续、文件系統(tǒng)級別備份
? 說白了叉袍,就是復制pg的數(shù)據(jù)文件,但是在某些條件下喳逛,有缺點,比如用tar -cf backup.tar /var/lib/postgresql/data進行復制姐呐,有一下兩點:
? 1典蝌、數(shù)據(jù)庫服務器必須被關閉,官方文檔表示可能是tar和類似工具無法得到文件系統(tǒng)狀態(tài)的一個原子的快照赠法,還有服務器內部緩沖的原因。
? 2款侵、如果想通過相應的文件或者目錄來備份或恢復特定的表或者數(shù)據(jù)庫侧纯,是行不通的,因為缺少必要的日志文件(日志文件包含了事務的提交狀態(tài))眶熬。

?上面這種方式筆者沒有嘗試過(別怪我,真的是拳缠,精力有限贸弥。。。)哲鸳,不過,在開啟wal歸檔備份的時候徙菠,筆者通過cp -rf /var/lib/postgresql/data/ /var/lib/postgresql/test復制整個目錄的方式(沒有關閉數(shù)據(jù)庫)婿奔,可以進行一次全量備份,而且在數(shù)據(jù)庫啟動時脸秽,也能成功加載出數(shù)據(jù)蝴乔。不過不能在任意時間點進行恢復。根據(jù)官方文檔的解釋片酝,是因為創(chuàng)建了數(shù)據(jù)目錄的的“一致快照”挖腰,而且備份文件在數(shù)據(jù)看來就像是出了故障,所以用備份數(shù)據(jù)啟動數(shù)據(jù)庫的時候猴仑,就會嘗試重放WAL日志(就是做redo),成功的進行數(shù)據(jù)恢復疾渣。

三崖飘、wal歸檔 和 基礎備份(全量備份)
?wal歸檔就是預寫式日志,就是記錄了數(shù)據(jù)頁的修改記錄朱浴。pg痛過開啟wal歸檔,記錄下事務的執(zhí)行日志项乒,通過這些日志就可以支持任意時間點的數(shù)據(jù)恢復梁沧,即PITR。具體詳細介紹

? 啟用wal歸檔功能埃碱,需要對pg配置文件postgresql.conf進行修改:

1、wal_level = replica
2砚殿、archive_mode = on
# backup_in_progress文件用來輔助wal日志備份,通過刪除配合test指令控制wal日志備份
3辛萍、archive_command = 'test ! -f /var/lib/postgresql/backup_in_progress || (test ! -f /var/lib/postgresql/pg_log_archive/%f && cp %p /var/lib/postgresql/pg_log_archive/%f)'

?/var/lib/postgresql/pg_log_archive是存放wal日志備份的地方羡藐。配置完成后,啟動數(shù)據(jù)庫辉阶,就開啟了wal日志備份瘩扼,在wal段文件達到16MB時,就會執(zhí)行一次歸檔集绰。當然也可以手動執(zhí)行select pg_switch_wal();進行歸檔。

? wal歸檔功能有了罕袋,但是這只是相當于差異備份碍岔,還需要全量備份,下面就來看看全量備份(基礎備份):

1付秕、使用底層API進行,參考點

touch /var/lib/postgresql/backup_in_progress
# 開始基礎備份,可以在代碼里連接數(shù)據(jù)庫執(zhí)行
psql -c "select pg_start_backup('hot_backup');" # 需要用postgres用戶
# 將數(shù)據(jù)庫文件進行備份
tar -cf /var/lib/postgresql/backup.tar /var/lib/postgresql/data/
# 結束備份,可以在代碼里連接數(shù)據(jù)庫執(zhí)行
psql -c "select pg_stop_backup();" # 需要用postgres用戶
# 停止wal日志備份
rm /var/lib/postgresql/backup_in_progress
# 將wal日志和基礎備份打包在一起
tar -rf /var/lib/postgresql/backup.tar /var/lib/postgresql/pg_log_archive

2掠河、使用pg_basebackup

su - postgres; # 切換到 postgres用戶
# 執(zhí)行備份
pg_basebackup -Ft -X none -D - | gzip > /var/lib/postgresql/%f_base.tar.gz;

四猛计、時間點恢復(PITR)

假設我們有一份備份文件,基礎備份:/var/lib/postgresql/backup_base.tar.gz 和 wal歸檔目錄:/var/lib/postgresql/pg_log_archive勾拉,pg的數(shù)據(jù)目錄是:/var/lib/postgresql/data/pgdata通過以上步驟進行數(shù)據(jù)恢復:

1、解壓數(shù)據(jù)

tar xvfz /var/lib/postgresql/backup_base.tar.gz -C /var/lib/postgresql/data/pgdata

2成肘、配置recovery.conf

vim /var/lib/postgresql/data/pgdata/recovery.conf

# recovery.conf 配置下面兩行

# 利用wal日志進行redo
restore_command = 'cp /var/lib/postgresql/pg_log_archive/%f %p'
# 指定要恢復的時間點斧蜕,也可以不指定,直接恢復所有數(shù)據(jù)
recovery_target_time = '2019-10-10 18:00:00 UTC'

3批销、指定/var/lib/postgresql/data/pgdata為pg的數(shù)據(jù)目錄啟動pg,就可以進行數(shù)據(jù)恢復丘逸。如果是指定恢復到某一時間點掀宋,即有recovery_target_time配置項,在啟動數(shù)據(jù)庫后囤萤,還需要執(zhí)行語句select pg_wal_replay_resume();開啟wal備份是趴,完成本次數(shù)據(jù)恢復操作澄惊。

下一篇:pg單機自動化日志備份系列二

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肛搬,隨后出現(xiàn)的幾起案子毕贼,更是在濱河造成了極大的恐慌,老刑警劉巖鬼癣,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件待秃,死亡現(xiàn)場離奇詭異,居然都是意外死亡章郁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門聊替,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淹辞,你說我怎么就攤上這事俘侠。” “怎么了央星?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵惫东,是天一觀的道長。 經常有香客問我颓遏,道長滞时,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任曼玩,我火速辦了婚禮窒百,結果婚禮上,老公的妹妹穿的比我還像新娘篙梢。我一直安慰自己,他們只是感情好贬墩,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布蔼水。 她就那樣靜靜地躺著,像睡著了一般吊说。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颁井,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天雅宾,我揣著相機與錄音,去河邊找鬼眉抬。 笑死,一個胖子當著我的面吹牛悄谐,可吹牛的內容都是我干的库北。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼情屹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杂腰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蜡镶,失蹤者是張志新(化名)和其女友劉穎恤筛,沒想到半個月后芹橡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡煎殷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年腿箩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弓乙。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖勾习,靈堂內的尸體忽然破棺而出懈玻,到底是詐尸還是另有隱情,我是刑警寧澤涂乌,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布湾盒,位于F島的核電站,受9級特大地震影響历涝,放射性物質發(fā)生泄漏。R本人自食惡果不足惜荧库,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一分衫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚪战,春花似錦、人聲如沸瞎疼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽太抓。三九已至,卻和暖如春走敌,著一層夾襖步出監(jiān)牢的瞬間逗噩,已是汗流浹背跌榔。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工机打, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人皆辽。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓芥挣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親空免。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容