PostgreSQL備份之omniPITR

來源:互聯網
上載者:User

標籤:

一、準備1. 安裝

omnipitr是用perl寫的,直接下載下來就可以用了

# git clone https://github.com/omniti-labs/omnipitr.git /opt/omnipitr/Initialized empty Git repository in /opt/omnipitr/.git/remote: Counting objects: 2627, done.remote: Total 2627 (delta 0), reused 0 (delta 0), pack-reused 2627Receiving objects: 100% (2627/2627), 742.71 KiB | 28 KiB/s, done.Resolving deltas: 100% (1287/1287), done.
2. 檢查:
# /opt/omnipitr/bin/sanity-check.shChecking:- /opt/omnipitr/bin- /opt/omnipitr/lib9 programs, 31 libraries.Tar versionAll checked, and looks ok.
3. 建立目錄:
# mkdir -p /data/omnipitr/test_94/{log,state,tmp}# chown -R postgres:postgres /data/omnipitr
二、 備份1. 從master節點上備份

1)修改archive_command

test ! -f /data/omnipitr/test_94/tmp/backup/%f && cp %p /data/omnipitr/test_94/tmp/backup/%f

如果已經將wal歸檔到其他地方,不需要備份wal檔案,就不需要配置這個

2)備份到本地

$ /opt/omnipitr/bin/omnipitr-backup-master --host=localhost \    #master節點ip--username=postgres \    #串連master節點的使用者--port=5432 \    #master節點的連接埠--data-dir=/data/postgres/data/test_94/ \    #master節點的資料目錄--dst-local gzip=/data/postgres/backup/test_94/ \    #本地備份目錄--xlogs=/data/omnipitr/test_94/tmp/backup \    #用于歸檔xlog的目錄,執行命令前不能存在,如果不需要備份xlog,替換成--skip-xlogs--temp-dir=/data/omnipitr/test_94/tmp/ \    #建立臨時檔案的目錄,可以不指定,預設是/tmp--pid-file=/data/omnipitr/test_94/state/base_backup.pid \    #進程檔案,保證同時只有一個備份在執行--log=/data/omnipitr/test_94/log/base_backup.log \    #日誌輸出檔案--verbose    #列印詳細資料

3)備份的詳細日誌資訊

2015-09-09 04:50:54.185227 -0400 : 9766 : omnipitr-backup-master : LOG : Called with parameters: --host=localhost --username=postgres --port=5432 --data-dir=/data/postgres/data/test_94/ --dst-local gzip=/data/postgres/backup/test_94/ --xlogs=/data/omnipitr/test_94/tmp/backup --temp-dir=/data/omnipitr/test_94/tmp/ --pid-file=/data/omnipitr/test_94/state/base_backup.pid --log=/data/omnipitr/test_94/log/base_backup.log --verbose2015-09-09 04:50:54.363777 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [SELECT w, pg_xlogfile_name(w) from (select pg_start_backup(‘omnipitr‘) as w ) as x] took: 0.175s2015-09-09 04:50:54.366482 -0400 : 9766 : omnipitr-backup-master : LOG : pg_start_backup(‘omnipitr‘) returned 1/3C000028|00000001000000010000003C.2015-09-09 04:50:54.368554 -0400 : 9766 : omnipitr-backup-master : LOG : Script to make tarballs:2015-09-09 04:50:54.368554 -0400 : 9766 : omnipitr-backup-master : LOG : mkfifo \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-02015-09-09 04:50:54.368554 -0400 : 9766 : omnipitr-backup-master : LOG : nice gzip \-\-stdout \- < \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-0 > \/data\/postgres\/backup\/test_94\/QA\-5\-45\-data\-2015\-09\-09\.tar\.gz &2015-09-09 04:50:54.368554 -0400 : 9766 : omnipitr-backup-master : LOG : nice tar cf \- \-\-exclude\=pg_log\/\* \-\-exclude\=pg_xlog\/0\* \-\-exclude\=pg_xlog\/archive_status\/\* \-\-exclude\=postmaster\.pid test_94 2> \/data\/omnipitr\/test_94\/tmp\/omnipitr\-backup\-master\/9766\/tar\.stderr > \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-02015-09-09 04:50:54.368554 -0400 : 9766 : omnipitr-backup-master : LOG : wait2015-09-09 04:50:54.368554 -0400 : 9766 : omnipitr-backup-master : LOG : rm \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-02015-09-09 04:51:14.415299 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Compressing $PGDATA] took: 20.048s2015-09-09 04:51:15.483531 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [SELECT pg_stop_backup()] took: 1.066s2015-09-09 04:51:15.486756 -0400 : 9766 : omnipitr-backup-master : LOG : pg_stop_backup(‘omnipitr‘) returned 1/3C000128.2015-09-09 04:51:15.487734 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Making data archive] took: 21.300s2015-09-09 04:51:15.489015 -0400 : 9766 : omnipitr-backup-master : LOG : File 00000001000000010000003C.00000028.backup arrived after 0 seconds.2015-09-09 04:51:15.490275 -0400 : 9766 : omnipitr-backup-master : LOG : File 00000001000000010000003C arrived after 0 seconds.2015-09-09 04:51:15.491816 -0400 : 9766 : omnipitr-backup-master : LOG : Script to make tarballs:2015-09-09 04:51:15.491816 -0400 : 9766 : omnipitr-backup-master : LOG : mkfifo \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-02015-09-09 04:51:15.491816 -0400 : 9766 : omnipitr-backup-master : LOG : nice gzip \-\-stdout \- < \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-0 > \/data\/postgres\/backup\/test_94\/QA\-5\-45\-xlog\-2015\-09\-09\.tar\.gz &2015-09-09 04:51:15.491816 -0400 : 9766 : omnipitr-backup-master : LOG : nice tar cf \- test_94 2> \/data\/omnipitr\/test_94\/tmp\/omnipitr\-backup\-master\/9766\/tar\.stderr > \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-02015-09-09 04:51:15.491816 -0400 : 9766 : omnipitr-backup-master : LOG : wait2015-09-09 04:51:15.491816 -0400 : 9766 : omnipitr-backup-master : LOG : rm \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-02015-09-09 04:51:15.936762 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Compressing xlogs] took: 0.445s2015-09-09 04:51:15.947223 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Making xlog archive] took: 0.458s2015-09-09 04:51:15.948752 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Delivering to all remote destinations] took: 0.000s2015-09-09 04:51:15.950304 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Delivering meta files] took: 0.001s2015-09-09 04:51:15.951272 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Whole backup procedure] took: 21.764s2015-09-09 04:51:15.952141 -0400 : 9766 : omnipitr-backup-master : LOG : All done.

4) 備份檔案

$ ll /data/postgres/backup/test_94/total 95620-rw-rw-r--. 1 postgres postgres 97851471 Sep  9 04:56 QA-5-45-data-2015-09-09.tar.gz-rw-rw-r--. 1 postgres postgres       93 Sep  9 04:56 QA-5-45-meta-2015-09-09.tar.gz-rw-rw-r--. 1 postgres postgres    54742 Sep  9 04:56 QA-5-45-xlog-2015-09-09.tar.gz

5) 備份到遠端

$ /opt/omnipitr/bin/omnipitr-backup-master --host=localhost --username=postgres --port=5432 --data-dir=/data/postgres/data/test_94/ --dst-direct [email protected]:/data/postgres/backup/test_94/ \    #使用ssh方式傳送備份--skip-xlogs \    #不備份wal檔案--temp-dir=/data/omnipitr/test_94/tmp/ --pid-file=/data/omnipitr/test_94/state/base_backup.pid --log=/data/omnipitr/test_94/log/base_backup.log --verbose [email protected]‘s password:
2.  從slave節點備份

1) 備份

$ /opt/omnipitr/bin/omnipitr-backup-slave --host=172.17.5.45 \    #master節點ip--username=postgres --port=5432 --call-master \    #保證在master上執行SELECT pg_start_backup( ‘...‘ );和SELECT pg_stop_backup();,否則做出來的備份可能無效--data-dir=/data/postgres/data/test_94/ --dst-local gzip=/data/postgres/backup/test_94/ --skip-xlogs --temp-dir=/data/omnipitr/test_94/tmp/ --pid-file=/data/omnipitr/test_94/state/base_backup.pid --log=/data/omnipitr/test_94/log/base_backup.log --verbosePassword for user postgres: Password for user postgres: Password for user postgres:

2) 備份日誌

2015-09-09 06:16:55.621897 -0400 : 23447 : omnipitr-backup-slave : LOG : Called with parameters: --host=172.17.5.45 --username=postgres --port=5432 --call-master --data-dir=/data/postgres/data/test_94/ --dst-local gzip=/data/postgres/backup/test_94/ --skip-xlogs --temp-dir=/data/omnipitr/test_94/tmp/ --pid-file=/data/omnipitr/test_94/state/base_backup.pid --log=/data/omnipitr/test_94/log/base_backup.log --verbose2015-09-09 06:16:58.856673 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [SELECT w, pg_xlogfile_name(w) from ( as w ) as x] took: 3.220s2015-09-09 06:16:58.864733 -0400 : 23447 : omnipitr-backup-slave : LOG : pg_start_backup(‘omnipitr‘, true) returned 1/62000028|000000010000000100000062.2015-09-09 06:17:01.862033 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [select pg_read_file( ‘backup_label‘, 0, ( pg_stat_file( ‘backup_label‘ ) ).size )] took: 2.996s2015-09-09 06:17:01.863971 -0400 : 23447 : omnipitr-backup-slave : LOG : Waiting for checkpoint (based on backup_label from master) - CHECKPOINT LOCATION: 1/620000602015-09-09 06:18:37.008788 -0400 : 23447 : omnipitr-backup-slave : LOG : Checkpoint .2015-09-09 06:18:37.013235 -0400 : 23447 : omnipitr-backup-slave : LOG : Script to make tarballs:2015-09-09 06:18:37.013235 -0400 : 23447 : omnipitr-backup-slave : LOG : mkfifo \/tmp\/CommandPiper\-23447\-buP6d5\/fifo\-02015-09-09 06:18:37.013235 -0400 : 23447 : omnipitr-backup-slave : LOG : nice gzip \-\-stdout \- < \/tmp\/CommandPiper\-23447\-buP6d5\/fifo\-0 > \/data\/postgres\/backup\/test_94\/node2\-data\-2015\-09\-09\.tar\.gz &2015-09-09 06:18:37.013235 -0400 : 23447 : omnipitr-backup-slave : LOG : nice tar cf \- \-\-exclude\=test_94\/pg_log\/\* \-\-exclude\=test_94\/pg_xlog\/0\* \-\-exclude\=test_94\/pg_xlog\/archive_status\/\* \-\-exclude\=test_94\/recovery\.conf \-\-exclude\=test_94\/postmaster\.pid \-\-transform\=s\#\^data\/omnipitr\/test_94\/tmp\/omnipitr\-backup\-slave\/23447\/\#test_94\/\# test_94 \/data\/omnipitr\/test_94\/tmp\/omnipitr\-backup\-slave\/23447\/backup_label 2> \/data\/omnipitr\/test_94\/tmp\/omnipitr\-backup\-slave\/23447\/tar\.stderr > \/tmp\/CommandPiper\-23447\-buP6d5\/fifo\-02015-09-09 06:18:37.013235 -0400 : 23447 : omnipitr-backup-slave : LOG : wait2015-09-09 06:18:37.013235 -0400 : 23447 : omnipitr-backup-slave : LOG : rm \/tmp\/CommandPiper\-23447\-buP6d5\/fifo\-02015-09-09 06:18:57.288130 -0400 : 23447 : omnipitr-backup-slave : LOG : tar stderr:2015-09-09 06:18:57.290137 -0400 : 23447 : omnipitr-backup-slave : LOG : ==============================================2015-09-09 06:18:57.290849 -0400 : 23447 : omnipitr-backup-slave : LOG : tar: Removing leading `/‘ from member names2015-09-09 06:18:57.291659 -0400 : 23447 : omnipitr-backup-slave : LOG : ==============================================2015-09-09 06:18:57.292502 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Compressing $PGDATA] took: 20.280s2015-09-09 06:19:34.578726 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [SELECT pg_stop_backup()] took: 37.285s2015-09-09 06:19:34.580554 -0400 : 23447 : omnipitr-backup-slave : LOG : pg_stop_backup() returned 1/62000128.2015-09-09 06:19:34.581542 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Making data archive] took: 158.950s2015-09-09 06:19:34.582615 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Making xlog archive] took: 0.000s2015-09-09 06:19:34.583894 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Delivering to all remote destinations] took: 0.000s2015-09-09 06:19:34.585621 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Delivering meta files] took: 0.000s2015-09-09 06:19:34.586895 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Whole backup procedure] took: 158.955s2015-09-09 06:19:34.587940 -0400 : 23447 : omnipitr-backup-slave : LOG : All done.

3) 備份檔案

# ll /data/postgres/backup/test_94/total 95548-rw-r--r--. 1 postgres postgres 97836713 Sep  9 06:18 node2-data-2015-09-09.tar.gz-rw-r--r--. 1 postgres postgres       91 Sep  9 06:19 node2-meta-2015-09-09.tar.gz

4) 備忘

預設執行pg_start_backup()是沒有加true的,上面紅色的部分是我修改了下代碼,這樣執行checkpoint會快很多


PostgreSQL備份之omniPITR

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.