postgres備份

| | 備份速度|備份范圍|恢復(fù)范圍|操作影響|備份原理|恢復(fù)成本|
| ------- |:------:|:-----:|:------:|:------:|:-----:|:-----:|:-------|
| 流復(fù)制 | 實(shí)時 | 全備 | 當(dāng)前時刻|備庫只讀 | 預(yù)寫日志 | 高可用切換|
| pg_dump(all) | 慢 |全備(庫表) | 備份時刻|無,互斥鎖,DDL|SQL訪問|停庫恢復(fù)|
| pg_basebackup|快| 全備 | 備份時刻|無|文件復(fù)制|停庫恢復(fù)|
|連續(xù)歸檔(PITR)|快 | 增量 |上一次全備到當(dāng)前任意時刻|無|歸檔日志|停庫恢復(fù)

postgres安裝

  • centos自帶postgres丘损,通過yum list | grep postgresql查看,安裝最新版的postgres,安裝yum源:yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

  • 安裝PostgreSQL: yum install postgresql96-server postgresql96-contrib

  • 可執(zhí)行文件在 /usr/pgsql-9.6/bin/添加到環(huán)境變量, 數(shù)據(jù)和配置文件在 /var/lib/pgsql/9.6/data/

export POSTGRES_HOME=/usr/pgsql-9.6
export PGDATA=/var/lib/pgsql/9.6/data/
export PATH=$PATH:$POSTGRES_HOME/bin


TZ='Asia/Shanghai'; export TZ

  • 初始化數(shù)據(jù)庫, 在數(shù)據(jù)文件目錄/var/lib/pgsql/9.6/data/ 下執(zhí)行

    • su - postgres
    • initdb ./
  • 支持密碼登錄修改相關(guān)文件:

    • vi /var/lib/pgsql/9.6/data/pg_hba.conf添加host all all 0.0.0.0 0.0.0.0 md5
    • 開啟遠(yuǎn)程訪問舆驶,vi postgresql.conf修改 listen_addresses='*'
    • 重啟postgres,su postgres -c 'pg_ctl restart'拘荡,如果沒有設(shè)置$PGDATA環(huán)境變量珊皿,執(zhí)行該命令需要指定數(shù)據(jù)庫目錄-D /data
  • 登錄袱结,創(chuàng)建用戶

    • 執(zhí)行su postgres垢夹,輸入psql進(jìn)入postgres命令行
    • 執(zhí)行ALTER USER postgres WITH PASSWORD '123456' 設(shè)置postgres用戶的密碼
    • 查看角色\du果元,創(chuàng)建用戶并分配權(quán)限create user test_user password '123456' Superuser CreateDB; 刪除用戶drop user test_user;
    • 退出\q

postgres備份

  • SQL轉(zhuǎn)儲
  • 文件系統(tǒng)級別備份
  • 流復(fù)制
  • 在線增量備份與任意時間點(diǎn)恢復(fù)

一而晒、SQL轉(zhuǎn)儲

SQL 轉(zhuǎn)儲方法的思想是創(chuàng)建一個由SQL命令組成的文件,當(dāng)把這個文件回饋給服務(wù)器時迅耘,服務(wù)器將利用其中的SQL命令重建與轉(zhuǎn)儲時狀態(tài)一樣的數(shù)據(jù)庫监署。pg_dump創(chuàng)建的備份在內(nèi)部是一致的钠乏, 也就是說晓避,轉(zhuǎn)儲表現(xiàn)了pg_dump開始運(yùn)行時刻的數(shù)據(jù)庫快照,且在pg_dump運(yùn)行過程中發(fā)生的更新將不會被轉(zhuǎn)儲暑塑。pg_dump工作的時候并不阻塞其他的對數(shù)據(jù)庫的操作梯投。 (但是會阻塞那些需要排它鎖的操作,比如大部分形式的ALTER TABLE)

  • 導(dǎo)出數(shù)據(jù)庫數(shù)據(jù) pg_dump -U postgres -f /home/pg1.sql pg
  • 恢復(fù)數(shù)據(jù) psql -U postgres -f /home/pg1.sql pg
  • pg_dump 表備份 pg_dump databasename –t tablename1 –t tablename2 >filename
  • pg_dumpall備份所有數(shù)據(jù)庫及角色 pg_dumpall > /home/pg_all.dmp, 恢復(fù) psql –f /home/pg_all.dmp postgres
  • 備份壓縮(處理大型數(shù)據(jù)庫)
    • 備份 pg_dump dbname | gzip > filename.gz
    • 恢復(fù) gunzip -c filename.gz | psql dbname

二么鹤、文件系統(tǒng)級別備份

  • 連續(xù)歸檔基礎(chǔ)備份pg_basebackup蒸甜,被用于獲得一個正在運(yùn)行的PostgreSQL數(shù)據(jù)庫集簇的基礎(chǔ)備份柠新,備份通過一個常規(guī)PostgreSQL連接制作辉巡,并且使用復(fù)制協(xié)議郊楣。獲得這些備份不會影響連接到該數(shù)據(jù)庫的其他客戶端,

  • 直接復(fù)制PostgreSQL用于存儲數(shù)據(jù)庫中數(shù)據(jù)的文件,要求主庫關(guān)閉。
    tar -cf backup.tar /usr/local/pgsql/data

  • 創(chuàng)建一個數(shù)據(jù)目錄的"一致快照"钥组,創(chuàng)建一個包含數(shù)據(jù)庫的卷的"凍結(jié)快照"程梦,然后從該快照復(fù)制整個數(shù)據(jù)目錄(如上橘荠,不能是部分復(fù)制)到備份設(shè)備砾医,最后釋放凍結(jié)快照如蚜。即使在數(shù)據(jù)庫服務(wù)器運(yùn)行時,這種方式也有效探赫。但是伦吠,以這種方式創(chuàng)建的備份保存的文件看起來就像數(shù)據(jù)庫沒有被正確關(guān)閉時的狀態(tài)。因此毛仪,當(dāng)你從備份數(shù)據(jù)上啟動數(shù)據(jù)庫服務(wù)器時搁嗓,它會認(rèn)為上一次的服務(wù)器實(shí)例崩潰了并嘗試重放WAL日志。這不是問題箱靴,只是需要注意(當(dāng)然WAL文件必須要包括在備份中)腺逛。你可以在拍攝快照之前執(zhí)行一次CHECKPOINT以便節(jié)省恢復(fù)時間。

  • 使用rsync來執(zhí)行一次文件系統(tǒng)備份衡怀。其做法是先在數(shù)據(jù)庫服務(wù)器運(yùn)行時執(zhí)行rsync棍矛,然后關(guān)閉數(shù)據(jù)庫服務(wù)器足夠長時間來做一次rsync --checksum (--checksum是必需的,因?yàn)閞sync的文件修改 時間粒度只能精確到秒)抛杨。

三够委、流復(fù)制

流復(fù)制允許一臺后備服務(wù)器比使用基于文件的日志傳送更能保持為最新的狀態(tài)怖现。 后備服務(wù)器連接到主服務(wù)器茁帽, 主服務(wù)器則在 WAL(write ahead log) 記錄產(chǎn)生時即將它們以流式傳送給后備服務(wù)器而不必等到 WAL文件被填充。在這種情況下主服務(wù)器上提交一個事務(wù)與該變化在后備服務(wù)器上變得可見之間存在短暫的延遲真竖。 不過這種延遲比基于文件的日志傳送方式中要小得多脐雪, 在后備服務(wù)器的能力足以跟得上負(fù)載的前提下延遲通常低于一秒。

默認(rèn)情況下流復(fù)制是異步的

主庫配置

  • 創(chuàng)建復(fù)制用戶: create user rep replication password '123456';

  • 配置pg_hba.conf: host replication rep 10.0.12.5/8 md5

  • 配置postgresql.conf:

 wal_level = replica
 hot_standby = on
 max_wal_senders = 2            #流復(fù)制最大連接數(shù)
 wal_keep_segments = 16        #xlog段的大小 

從庫配置

    cp /usr/pgsql-9.6/share/recovery.conf.sample  $PGDATA/recovery.conf
    vim $PGDATA/recovery.conf
    standby_mode = on
    primary_conninfo = 'host=10.0.12.56 port=5432 user=rep password=123456'
  • 啟動postgres: pg_ctl start

測試 流復(fù)制

查看相關(guān)進(jìn)程

  • 主庫查找進(jìn)程ps -ef |grep postgres恢共,其中包含 postgres: wal sender process...
  • 從庫查找進(jìn)程ps -ef |grep postgres战秋,其中包含 postgres: wal receiver process...

查看記錄點(diǎn)

  • 返回主庫記錄點(diǎn)、備庫記錄點(diǎn):postgres=# select txid_current_snapshot(); 主庫每增加一條寫入讨韭,記錄點(diǎn)的值就會加1

查看主備庫同步狀態(tài)

  • postgres=# select * from pg_stat_replication; 字段state顯示的同步狀態(tài)有:startup(連接中)脂信、catchup(同步中)、streaming(同步)透硝;字段sync_state顯示的模式有:async(異步)狰闪、sync(同步)、potential(雖然現(xiàn)在是異步模式濒生,但是有可能升級到同步模式)

  • 此時在主庫對數(shù)據(jù)的操作將會同步至備庫埋泵,備庫處于只讀模式。參考主從切換罪治,將備庫升級為主庫丽声。

四、在線增量備份與任意時間點(diǎn)恢復(fù)

在任何時間觉义,PostgreSQL在數(shù)據(jù)集簇目錄的pg_xlog/子目錄下都保持有一個預(yù)寫式日志(WAL)雁社。這個日志存在的目的是為了保證崩潰后的安全:如果系統(tǒng)崩潰,可以"重放"從最后一次檢查點(diǎn)以來的日志項(xiàng)來恢復(fù)數(shù)據(jù)庫的一致性晒骇。該日志的存在也使得第三種備份數(shù)據(jù)庫的策略變得可能:我們可以把一個文件系統(tǒng)級別的備份和WAL文件的備份結(jié)合起來霉撵。當(dāng)需要恢復(fù)時磺浙,我們先恢復(fù)文件系統(tǒng)備份,然后從備份的WAL文件中重放來把系統(tǒng)帶到一個當(dāng)前狀態(tài)徒坡。這種方法比之前的方法管理起來要更復(fù)雜撕氧,但是可以實(shí)現(xiàn)數(shù)據(jù)任意時間點(diǎn)恢復(fù)功能。

主庫設(shè)置(基于流復(fù)制中主庫的配置)

  • 配置postgresql.conf:
#開啟歸檔模式
archive_mode = on
archive_command = 'ssh 10.0.12.5 test ! -f /data/postgres/pg_archive/%f && scp %p  10.0.12.5:/data/postgres/pg_archive/%f'

其中archive_command是歸檔命令崭参,將歸檔文件傳送至 10.0.12.5備份服務(wù)器的/data/postgres/pg_archive目錄下

執(zhí)行該命令前要保證 主備庫服務(wù)器的免密登錄, postgres用戶目錄在/var/lib/pgsql呵曹,切換postgres用戶,執(zhí)行ssh-keygen -t rsa何暮,將生成的公鑰/var/lib/pgsql/.ssh/id_rsa.pub添加到免密登錄主機(jī)對應(yīng)的/var/lib/pgsql/.ssh/authorized_keys文件中,注意公鑰中的主機(jī)名需要在免密登錄的主機(jī)上配置dns或直接改為ip地址铐殃。

重啟主庫pg_ctl restart

從庫設(shè)置

  • 創(chuàng)建存儲歸檔文件的目錄: mkdir -p /data/postgres/pg_archive海洼,設(shè)置文件權(quán)限chown postgres:postgres /data/postgres/pg_archive

  • 創(chuàng)建主庫的基礎(chǔ)備份目錄 mkdir -p /data/postgres/pg_basebackup,執(zhí)行pg_basebackup -D /data/postgres/pg_basebackup -Fp -Xs -v -P -h 10.0.12.56 -p 5432 -U rep將主庫基礎(chǔ)備份至該目錄富腊,然后需要修改基礎(chǔ)備份中的postgresql.conf坏逢,關(guān)閉歸檔模式,注釋掉archive_modearchive_command

  • 配置恢復(fù)文件赘被,restore_command將歸檔日志復(fù)制過來是整,recovery_target_time是恢復(fù)到的時間點(diǎn),將$PGDATA/var/lib/pgsql/9.6/data鏈接到基礎(chǔ)備份目錄/data/postgres/pg_basebackup,設(shè)置權(quán)限chmod 0700 $PGDATA民假,啟動postgres浮入,pg_ctl start,即可恢復(fù)到指定時間點(diǎn)羊异。

cp /usr/pgsql-9.6/share/recovery.conf.sample  /data/postgres/pg_basebackuprecovery.conf

vim recovery.conf
restore_command = 'cp /data/postgres/pg_basebackup/%f %p'
recovery_target_time = '2017-11-14 18:31:00'

參考資料:

http://www.postgres.cn/docs/9.6/backup.html

https://yq.aliyun.com/articles/59355#

http://blog.csdn.net/yanggd1987/article/details/51209344

https://www.2cto.com/database/201708/670383.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末事秀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子野舶,更是在濱河造成了極大的恐慌易迹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件平道,死亡現(xiàn)場離奇詭異睹欲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)一屋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門窘疮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陆淀,你說我怎么就攤上這事考余。” “怎么了轧苫?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵楚堤,是天一觀的道長疫蔓。 經(jīng)常有香客問我,道長身冬,這世上最難降的妖魔是什么衅胀? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮酥筝,結(jié)果婚禮上滚躯,老公的妹妹穿的比我還像新娘。我一直安慰自己嘿歌,他們只是感情好掸掏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宙帝,像睡著了一般丧凤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上步脓,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天愿待,我揣著相機(jī)與錄音,去河邊找鬼靴患。 笑死仍侥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸳君。 我是一名探鬼主播农渊,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼相嵌!你這毒婦竟也來了腿时?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤饭宾,失蹤者是張志新(化名)和其女友劉穎批糟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體看铆,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徽鼎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弹惦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片否淤。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棠隐,靈堂內(nèi)的尸體忽然破棺而出石抡,到底是詐尸還是另有隱情,我是刑警寧澤助泽,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布啰扛,位于F島的核電站嚎京,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏隐解。R本人自食惡果不足惜鞍帝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煞茫。 院中可真熱鬧帕涌,春花似錦、人聲如沸续徽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钦扭。三九已至辟躏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間土全,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工会涎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裹匙,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓末秃,卻偏偏與公主長得像概页,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子练慕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容