为什么80%的码农都做不了架构师?>>>   

一、准备

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 gzip=root@172.17.5.46:/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
root@172.17.5.46'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();,否则做出来的备份可能无效,对应的用户名必须是superuser
--data-dir=/data/postgres/data/test_94/ \
--dst-local gzip=/data/postgres/backup/test_94/ \
--source=/data/postgres/data/test_94/pg_xlog \
--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会快很多

转载于:https://my.oschina.net/aven92/blog/503960

PostgreSQL备份之omniPITR相关推荐

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

    为什么80%的码农都做不了架构师?>>>    一.备份 1. 需要保证archive_mode = on 和 archive_command是有效的 2. 在master节点上连接 ...

  2. postgresql 备份_在Kubernetes上使用PostgreSQL的正确姿势:第三部分

    在第二部分中,我们开始设计PostgreSQL控制器. 今天,我们从上次停下来的地方开始,然后开始详细介绍控制层(包括控制器和附带工具)如何跟踪PostgreSQL应用程序的状态. PostgreSQ ...

  3. postgresql 备份_PostgreSQL的备份与恢复

    Postgresql数据库迁移分两类: 同用户名.同schema迁移:可以使用pg数据库备份.还原功能. 不同用户名.不同schema迁移: 对于第二用迁移相对比较复杂,pg数据库访问时schema时 ...

  4. postgresql 备份_等保涉及的PostgreSQL数据库

    一.访问控制 1. 应及时删除或停用多余的.过期的账户,避免共享账户的存在 查看当前已有账户,询问管理员是否存在多余过期账户 2. 应授予管理用户所需的最小权限,实现管理用户的权限分离 这个管理用户的 ...

  5. postgresql 备份恢复(一)

    备份恢复对于每个数据来说都是非常重要的.一般的数据库都支持冷备份的方式,冷备份可以保证数据库在此刻的完整性.但是其缺点也非常的明显,为保持数据一致性.冷备份期间数据库中相关数据是不能够使用的,就大大影 ...

  6. 数据库服务器 之 Postgresql备份和恢复------SQL转储篇

    作者:小P 来自:LinuxSir.Org 摘要: 和任何包含珍贵数据的东西一样,PostgreSQL 数据库也应该经常备份.备份PostgreSQL数据库有三种方法,各种方法有利有弊,本文先讲一下S ...

  7. PostgreSQL备份恢复实现

    点击上方"蓝字" 关注我们,享更多干货! 本文主要介绍pg_dump.pg_dumpall.copy.pg_basebackup的使用. 一. pg_basebackup 1. p ...

  8. postgresql 备份 java_用JAVA执行CMD命令备份PG数据库,解决需要输入口令的问题

    最近要用JAVA做一个PostgreSQL的备份功能,没想到遇到一个大坑. 在网上搜索,很快就找到一个用JAVA的Runtime.getRuntime().exec()执行cmd命令来备份的方法. 执 ...

  9. postgresql 备份 还原

    windows  linux 通用 第一步: 通过 cmd 进入到postgresql 安装目录的 bin 下: cd C:\PostgreSQL\pg95\bin 第二步:备份数据库 pg_dump ...

最新文章

  1. mysql 性能剖析-profiles
  2. 文字图片垂直居中对齐
  3. 【印象】2016云栖大会城市峰会:上海、深圳、南京、北京等精彩复现
  4. ED/EP系列5《消费指令》
  5. 软件测试 homework2
  6. 数据库连接池的工作原理
  7. django 在保存数据前进行数据校验
  8. ANSI,ASCII,Unicode的区别与联系
  9. mysql 重装,Windows系统中完全卸载MySQL数据库实现重装mysql
  10. 保障危险品的物流安全问题,大数据扮演了重要角色
  11. dj鲜生-26-登陆时-记住用户名的操作
  12. 三种方法实现轮播图配置,史上最简方法~
  13. 又一版A+B [2008年浙江大学计算机及软件工程研究生机试真题]
  14. Android Sqlite 数据的存储
  15. 辅助驾驶等级_BBA霸榜、特斯拉折戟 E-NCAP辅助驾驶评测结果公布
  16. 降本增效利器!趣头条 Spark Remote Shuffle Service 最佳实践
  17. Asp.net自定义控件开发任我行(7)-注册自定义事件
  18. Python100天学习教程(Python学习视频_Python学习路线):Day01 初识Python
  19. jinjia2 模板库- django/flask
  20. android 图标制作

热门文章

  1. Jmeter上传文件
  2. java consul服务发现_分布式项目(七)consul 服务注册与发现
  3. 进入环境_大学新生,进入新环境该怎样和舍友、同学相处
  4. 中班音乐计算机反思,中班音乐教学反思
  5. mac服务器证书失效,Mac OS X Server:软件更新证书过期
  6. zc706开发板的linux移植,Zynq—Linux移植学习笔记(十)
  7. Flink学习笔记02:Flink三种运行模式
  8. iterm2自动补全_【超级实用】Iterm2 + ohmyzsh 打造强大的终端编辑器
  9. bzoj2299 [HAOI2011]向量 结论 裴蜀定理
  10. java中布局管理器的作用_使用Java布局管理器的目的是什么?