热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

PostgreSQL如何增量备份

http://suzhouclark.itpub.net/post/7184/470550增量备份PostgreSQL一、介绍PITR的全称是PointInTimeRecovery,它结合文件系统级备份WAL日志文件,达到增量备份PostgreSQL数据库系统.WAL的全称是WriteAheadLog,它记录着数据库修

增量备份 PostgreSQL

一、介绍

   PITR 的全称是 Point In Time Recovery, 它结合文件系统级备份 WAL 日志文件, 达
   到增量备份 PostgreSQL 数据库系统.
   WAL 的全称是 Write Ahead Log, 它记录着数据库修改数据文件的每一个动作. 如果
   系统挂了, 读入这些日志文件可以很方便快捷安全的恢复数据.
   要知道的是, PITR 备份不只是备份一张或几张表, 它是完全的备份, 不管是表、存储
   过程等. 它几乎是把原来的数据库系统做了一次克隆. 也就是说, 这种备份让我们无需
   关心数据库系统中有几个数据库, 每个数据库中又有些什么数据, 不用像 pg_dump 要
   指定数据库名称, 也不用像 slony 那样在配置文件中指定表, 还得是有主键的表.
   别幻想什么东西都是十全十美的, PITR 不是全能的. 它不能做 "高可用", 即 Master
   和 Slave 的东东, 它也不能做 "负载均衡". 如果你一定要这些东西, 可以配合其他软
   件实现.
   OK, 唠叨许多废话. 嗯... 说明你很有耐心, 呵呵!!!

二、设置及操作

   实现 PITR 备份方案, 接下来我们说说设置、备份及恢复.
   * 设置
   建立备份目录. 备份分基线 (baseline) 和日志备份, 所以我们要建立两个目录:
       mkdir -p /opt/bubase
       mkdir -p /opt/buxlog
   接着我们设定一些环境变量及备份所在目录:
       export PGDATA=/home/postgres/pgdata
       export BUBASE=/opt/bubase
       export BUXLOG=/opt/buxlog
   设置完上面那些变量后, 编辑 $PGDATA/postgresql.conf 文件, 设置如下:
       archive_mode = on
       archive_command = 'cp %p /opt/buxlog/%f'
   OK, 所有设置都完成了, 启动或重启 PostgreSQL 服务.
   * 备份
   备份是有顺序的, 先做基线备份, 然后备份日志.
   基线备份命令如下:
       psql -d template1 -c "select PG_START_BACKUP('backup baseline')"
       cp -R $PGDATA/* $BUBASE
       psql -d template1 -c "select PG_STOP_BACKUP()"
   基线备份好后, 就可以时不时的备份日志了, 命令如下:
       cp -R $PGDATA/pg_xlog/* $BUXLOG
日志备份尽可能的频繁一些. 因为当线上提供服务的所在磁盘坏掉, 而你又没有备份
   WAL 日志, 你会丢数据.
   * 恢复
   哎呀, 线上提供服务的 PostgreSQL 宕了。不怕、不怕, 我们这不是有备份嘛, 嚯嚯!
   嘎嘎, 不小心又弄来一台新机器(YY 中... 假设一下啦), 那我们把 baseline 的备份
   弄过来, 不管你用哪种方法. 拟定也放在 /home/postgres/pgdata 目录下.
   接着呢, 为了避免恢复还响应连接请求什么的, 我们把服务只开启本地连接, 修改 
   $PGDATA/postgresql.conf 文件:
       listen_addresses = 'localhost'
   再下来, 在 $PGDATA 目录下创建一个 recovery.conf 文件. PostgreSQL 启动的时候
   如果发现 $PGDATA 目录里面有这个文件就会进入恢复模式, 恢复完后会把这个文件重
   命名为 recovery.done. 文件内容只有一行, 如下:
       restore_command='cp /opt/buxlog/%f %p'
   注意这里是单引号, 别用双引号, 不然会提示错误.
   关键时刻了, 启动数据库:
       pg_ctl start -D $PGDATA -l /tmp/pg.log
   这个时候观察 /tmp/pg.log 文件, 会发现正在恢复一堆一堆、一坨一坨的 WAL 日志文
   件。
   最后, 恢复完后, 再把 $PGDATA/postgresql.conf 文件中的 listen_addresses 改回
   原来的模样。重启:
       pg_ctl restart -D $PGDATA -l /tmp/pg.log
   嚯嚯, 大功告成!!!

四、脚本化及自动化

   个人觉着这些步骤还是很繁琐的, 可以编写个什么脚本之类的, 把脚本放进 crontab 
   里面, 较比的省心.
   脚本如何写, 我就不献丑了. 不过, 这里需要说明一下的是, baseline 备份的频繁度
   会影响你恢复的速度. 为什么这么说呢, 因为每次备份 baseline, 恢复的时候也就恢
   复这次备份 baseline 以后的所有修改数据库数据文件的 WAL 就可以了,相信这是很
   好理解的.

以上所有的设置或测试都是基于 PostgreSQL 8.3.1 版本的.


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
  • 解决MacOS Catalina升级后VMware Fusion黑屏问题的详细指南
    本文深入探讨了如何在MacOS Catalina升级后解决VMware Fusion黑屏的问题。通过详细的步骤和代码示例,帮助用户快速恢复虚拟机的正常运行,并提供了额外的安全建议。适用于希望提升工作效率或学习新技术的读者。 ... [详细]
  • 如何在SQL Server 2008中通过Profiler跟踪特定数据库及获取客户端信息
    本文介绍如何利用SQL Server Profiler工具来监控特定数据库的操作,并获取执行这些操作的客户端计算机名和账户名。步骤包括创建新的跟踪、配置跟踪属性以及设置列筛选器以精确过滤数据。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • 当面临数据库清理任务时,若无删除或重建数据库的权限,可以通过编写SQL脚本来实现批量删除用户自定义的数据表和存储过程。本文将详细介绍如何构造这样的SQL脚本。 ... [详细]
  • 深入理解SQL Server中的聚集与非聚集索引
    本文探讨了SQL Server数据库中两种主要的索引类型——聚集索引和非聚集索引,通过对比分析它们的特点及应用场景,旨在帮助读者更好地理解和利用这两种索引以优化查询性能。 ... [详细]
  • 免费获取:全面更新的Linux集群视频教程及配套资源
    本资源包含最新的Linux集群视频教程、详细的教学资料、实用的学习课件、完整的源代码及多种软件开发工具。百度网盘链接:https://pan.baidu.com/s/1roYoSM0jHqa3PrCfaaaqUQ,提取码:41py。关注我们的公众号,获取更多更新的技术教程。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ... [详细]
author-avatar
超级独自旅行也快乐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有