PostgreSQL备份之omniPITR

一、准备

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 2627
Receiving objects: 100% (2627/2627), 742.71 KiB | 28 KiB/s, done.
Resolving deltas: 100% (1287/1287), done.
2. 检查:
# /opt/omnipitr/bin/sanity-check.sh
Checking:
- /opt/omnipitr/bin
- /opt/omnipitr/lib
9 programs, 31 libraries.
Tar version
All 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 --verbose
2015-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.175s
2015-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\-0
2015-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\-0
2015-09-09 04:50:54.368554 -0400 : 9766 : omnipitr-backup-master : LOG : wait
2015-09-09 04:50:54.368554 -0400 : 9766 : omnipitr-backup-master : LOG : rm \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-0
2015-09-09 04:51:14.415299 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Compressing $PGDATA] took: 20.048s
2015-09-09 04:51:15.483531 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [SELECT pg_stop_backup()] took: 1.066s
2015-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.300s
2015-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\-0
2015-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\-0
2015-09-09 04:51:15.491816 -0400 : 9766 : omnipitr-backup-master : LOG : wait
2015-09-09 04:51:15.491816 -0400 : 9766 : omnipitr-backup-master : LOG : rm \/tmp\/CommandPiper\-9766\-Ldy5aL\/fifo\-0
2015-09-09 04:51:15.936762 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Compressing xlogs] took: 0.445s
2015-09-09 04:51:15.947223 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Making xlog archive] took: 0.458s
2015-09-09 04:51:15.948752 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Delivering to all remote destinations] took: 0.000s
2015-09-09 04:51:15.950304 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Delivering meta files] took: 0.001s
2015-09-09 04:51:15.951272 -0400 : 9766 : omnipitr-backup-master : LOG : Timer [Whole backup procedure] took: 21.764s
2015-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 --verbose
Password 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 --verbose
2015-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.220s
2015-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.996s
2015-09-09 06:17:01.863971 -0400 : 23447 : omnipitr-backup-slave : LOG : Waiting for checkpoint (based on backup_label from master) - CHECKPOINT LOCATION: 1/62000060
2015-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\-0
2015-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\-0
2015-09-09 06:18:37.013235 -0400 : 23447 : omnipitr-backup-slave : LOG : wait
2015-09-09 06:18:37.013235 -0400 : 23447 : omnipitr-backup-slave : LOG : rm \/tmp\/CommandPiper\-23447\-buP6d5\/fifo\-0
2015-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 names
2015-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.280s
2015-09-09 06:19:34.578726 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [SELECT pg_stop_backup()] took: 37.285s
2015-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.950s
2015-09-09 06:19:34.582615 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Making xlog archive] took: 0.000s
2015-09-09 06:19:34.583894 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Delivering to all remote destinations] took: 0.000s
2015-09-09 06:19:34.585621 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Delivering meta files] took: 0.000s
2015-09-09 06:19:34.586895 -0400 : 23447 : omnipitr-backup-slave : LOG : Timer [Whole backup procedure] took: 158.955s
2015-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会快很多

时间: 2024-08-06 12:02:15

PostgreSQL备份之omniPITR的相关文章

postgresql 备份

PostgreSQL备份与恢复示例 文档控制 l       文档变更记录 日期 版本号 作者 备注 2009-8-13 v1.0 陈浩 创建 TOC \o "1-3" \h \z \u PostgreSQL备份与恢复 文档控制 一.       简介 二.       SQL转储 (一)pg_dump (二)pg_dumpall; (三)备份压缩与分割 三.       文件系统级别备份(冷备份) 四.       在线热备份(归档) (一)备份 (二)恢复 一.      简介 P

postgresql备份恢复数据库和批量导入导出数据到文件方法

备份数据库:pg_dump -h localhost -U root demo02 > /home/arno/dumps/demo02.bak 恢复数据库:psql -h localhost -U root -d demo <  demo.bak 备份表:pg_dump -h localhost -U root demo02 -t books > /home/arno/dumps/books.bak 恢复表:psql -h localhost -U root -d demo -t boo

PostgreSQL备份之pg_rman

一. 安装 PostgreSQL版本是9.4.4 # git clone -b REL9_4_STABLE https://github.com/ossc-db/pg_rman.git Initialized empty Git repository in /opt/pg_rman/.git/ remote: Counting objects: 1939, done. remote: Total 1939 (delta 0), reused 0 (delta 0), pack-reused 19

PostgreSQL备份之手工备份(Low Level API)

一.备份 1. 需要保证archive_mode = on 和 archive_command是有效的 2. 在master节点上连接上数据库并执行 SELECT pg_start_backup('label', true); pg_start_backup第二个参数设置为true的好处是备份开始会执行一个检查点,设置为true能尽快的完成检查点,并且能减少备份期间产生的wal文件,但是会对查询有影响,默认设置的checkpoint_completion_target的一半的时间,半夜的备份建议

PostgreSQL备份之pg_basebackup

一.准备 连接上master节点创建replication用户 # CREATE ROLE replicator with login replication password 123456: 修改白名单pg_hba.conf # host    replication    all        xxxxx/32    md5 二.制作基础备份 # pg_basebackup --format=tar \ #使用打包方式备份 --xlog-method=fetch \    #获取wal文件方

postgresql 备份 还原

windows  linux 通用 第一步:通过 cmd 进入到postgresql 安装目录的 bin 下: cd C:\PostgreSQL\pg95\bin 第二步:备份数据库 pg_dump -h localhost -U TPlusPosAdmin -d tegen -f "C:\testdatabase.bak" -h:数据库服务器地址: -p:数据库端口号: -U:U 大写,表示用户名: -d:数据库名称:-f:把备份文件放在哪里: 第三步:还原数据库(你要还原的数据库软

postgreSQL备份数据

1.pg_dump 备份单一数据库 pg_dump仅导出数据库结构:pg_dump -U TestRole1 -s -f TestDb1.sql TestDb1 备份某个database,备份结果以自定义压缩格式输出:pg_dump -h localhost -p 5432 -U someuser -F c -b -v -f mydb.backup mydb 备份某个database,备份结果以SQL文本方式输出,输出结果中需包括CREATE DATABASE语句:pg_dump -h loca

postgreSQL 备份多张表

-U表示用户 -h表示主机 -p表示端口号 -t表示表名 -f表示备份后的sql文件的名字 -d表示要恢复数据库名 一.打开cmd 进入postgresql安装路径下的bin文件夹,以我的为例: cd D:\Program Files\PostgreSQL\bin 二.输入备份命令,多个表每个表前面都要加 -t: 输入口令,即你的数据库登录密码,完成备份. pg_dump -U postgres -h localhost -p 5432 -t fsrd_user -t fsrd_tenant -

postgreSQL备份脚本删除3天前备份同时压缩昨天备份

脚本功能: 系统环境:SUSE Linux Server 11.3 X64 1.删除3天前压缩文件(.bak.tar.gz) 2.备份数据库(未压缩文件.bak) 3.压缩昨天数据库备份文件(.bak.tar.gz),删除昨天数据库备份未压缩文件(.bak) #!/bin/bash export PATH=$PATH:/usr/local/pgsql/bin DATE=`date +%Y_%m_%d_%H` YESDAY=`date -d "yesterday" +%Y_%m_%d_%