PostgreSQL 没有类似MySQL 的二进制日志, 但是有和MySQL 类似的REDO LOG,并且有MySQL 没有的REDO 归档功能。当然REDO 的归档已经MariaDB 和Percona-MySQL 已经实现。

那我们就利用PGSQL的REDO 归档,也叫WAL来实现增量备份。

假设我们已经做了一个物理的全备,并且相应的参数都已经设置完毕,比如以下:

  1.  
    /home/full_backup 保存全备的目录。
  2.  
    /home/increment_log 保存增备的目录。
  3.  
     
  4.  
     
  5.  
    进入postgresql.conf
  6.  
    开启WAL.
  7.  
    wal_level = archive
  8.  
    wal_keep_segments=1
  9.  
    开启WAL 的归档模式.
  10.  
    archive_mode = on
  11.  
    archive_command = 'test ! -f /home/increment_log/%f && cp %p /home/increment_log/%f' (归档,也就是增量)

那么关于WAL归档日志要注意的一点是,如果CRASH 掉了,那么没有归档的XLOG也可能没有提交到数据文件,所以有可能这部分数据会丢失掉。所以在之后恢复的时候我们要把这部分XLOG拷贝到全备的对应目录。

恢复方法:

  1.  
    1. 确保没有任何业务对PG服务进行访问。(有可能这个时候PG已经CRASH掉了。)
  2.  
    2. 先停掉POSTGRESQL 服务。
  3.  
    3. cd /home/pgsql;
  4.  
    4. mv data data_old
  5.  
    6. cp -rfp /home/full_backup/* /home/pgsql (拷贝全备)
  6.  
    7. cp -rfp data_old/pg_xlog/000* data/pg_xlog/ (这里是拷贝自从最后一个增量和系统CRASH之间的XLOG到对应的目录。)
  7.  
    8. cd data
  8.  
    9. vi recovery.conf (添加recovery.conf文件,让PG认为这次是在恢复。)
  9.  
    restore_command='test ! -f /home/increment_log/%f && cp /home/increment_log/%f %p'
  10.  
    recovery_target_timeline = 'latest'
  11.  
    10. chown -R postgres.postgres recovery.conf
  12.  
    11. 启动postgresql 服务即可。

如果正确恢复了,那么recovery.conf 会自动更名为recovery.done.

以我的机器为例,我的版本是9.3,PG_XLOG中看到的BACKUP 信息:

  1.  
    [root@postgresql-instance pg_xlog]# cat 000000010000000000000003.00000028.backup
  2.  
    START WAL LOCATION: 0/3000028 (file 000000010000000000000003)
  3.  
    STOP WAL LOCATION: 0/30000B8 (file 000000010000000000000003)
  4.  
    CHECKPOINT LOCATION: 0/3000028
  5.  
    BACKUP METHOD: pg_start_backup
  6.  
    BACKUP FROM: master
  7.  
    START TIME: 2014-01-07 03:35:02 EST
  8.  
    LABEL: ytt
  9.  
    STOP TIME: 2014-01-07 03:36:27 EST

日志中会看到恢复如下恢复信息:

    1.  
      < 2014-01-07 05:02:47.361 EST >LOG: 00000: starting archive recovery
    2.  
      < 2014-01-07 05:02:47.361 EST >LOCATION: StartupXLOG, xlog.c:4983
    3.  
      < 2014-01-07 05:02:47.369 EST >LOG: 00000: redo starts at 0/3000028
    4.  
      < 2014-01-07 05:02:47.369 EST >LOCATION: StartupXLOG, xlog.c:5531
    5.  
      < 2014-01-07 05:02:47.371 EST >LOG: 00000: consistent recovery state reached at 0/303FC88

PostgreSQL 增量备份详解以及相关示例的更多相关文章

  1. mysql全量和增量备份详解(带脚本)

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...

  2. Xtrabackup全量 增量备份详解

    xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份 ...

  3. MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken

    xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...

  4. Linux lsof命令详解和使用示例【转】

    所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接 ...

  5. MySQL数据库备份详解

    原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据 ...

  6. slf4j log4j logback关系详解和相关用法

    slf4j log4j logback关系详解和相关用法 写java也有一段时间了,一直都有用slf4j log4j输出日志的习惯.但是始终都是抱着"拿来主义"的态度,复制粘贴下配 ...

  7. WebService核心文件【server-config.wsdd】详解及调用示例

    WebService核心文件[server-config.wsdd]详解及调用示例 作者:Vashon 一.准备工作 导入需要的jar包: 二.配置web.xml 在web工程的web.xml中添加如 ...

  8. slf4j log4j logback log4j2关系详解和相关用法

    来源:slf4j log4j logback关系详解和相关用法https://www.cnblogs.com/Sinte-Beuve/p/5758971.html The Simple Logging ...

  9. php为什么需要异步编程?php异步编程的详解(附示例)

    本篇文章给大家带来的内容是关于php为什么需要异步编程?php异步编程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我对 php 异步的知识还比较混乱,写这篇是为了 ...

随机推荐

  1. hadoop2.8 集群 1 (伪分布式搭建)

    简介: 关于完整分布式请参考: hadoop2.8 ha 集群搭建   [七台机器的集群] Hadoop:(hadoop2.8) Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户 ...

  2. Android笔记(四十三) Android中的数据存储——SQLite(五)delete

    SQLite通过delete()方法删除数据 delete()方法参数说明: delete()方法参数 对应sql部分 描述 table delte from table_name 要删除的表 whe ...

  3. STM32+IAR 解决Error[Pe147]: declaration is incompatible with "__nounwind __interwork __softfp unsigned

    在IAR中编译STM32工程,遇到 Error[Pe147]: declaration is incompatible with "__nounwind __interwork __soft ...

  4. Qt错误: 程序数据库管理器不匹配 请检查安装

    错误提示: C1902: 程序数据库管理器不匹配:请检查安装解决 解决方法: 到D:\VisualStudio2015\VC\bin目录下面拷贝mspdbsrv.exe.mspdb140.dll.ms ...

  5. 关于CSDN的一些信息

    CSDN资源共享规范 为广大用户提供资源(包括但不限于文章.文档.音频.视频.图片.课程.软件.源代码等相关资源)共享的网络存储平台 与不得违反国家法律法规相关的规定 不得上传与CSDN提供的服务内容 ...

  6. javascript详解1

    推荐学习链接: https://book.apeland.cn/details/356/ http://es6.ruanyifeng.com/#README https://developer.moz ...

  7. react native jpush

    原文链接:https://blog.csdn.net/qq_38719039/article/details/80684144 1 npm install jpush-react-native --s ...

  8. node gm图片操作

    1,安首先要安装 GraphicsMagick或者ImageMagick 2,npm install gm   --save 3,编码测试 var fs = require('fs') //graph ...

  9. excel将一个工作表根据条件拆分成多个sheet工作表与合并多个sheet工作表

    本例介绍在excel中如何将一个工作表根据条件拆分成多个工作表. 注意:很多朋友反映sheets(i).delete这句代码出错,要注意下面第一个步骤,要拆分的数据工作表名称为“数据源”, 而不是你新 ...

  10. LeetCode - 86、分隔链表

    给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1->4-&g ...