热门标签 | 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 版本的.


推荐阅读
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文详细介绍了使用 SQL Load 和 Excel 的 Concatenate 功能将数据导入 ORACLE 数据库的方法和步骤,同时介绍了使用 PL/SQL tools 将数据导入临时表的方法。此外,还提供了一个转链接,可参考更多相关内容。摘要共计XXX字。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • oracle恢复失败,RMAN数据库恢复失败解决一例
    问题:这是一个从RAC环境的数据库的RAMN备份恢复到一个单机数据库的操作。当恢复数据文件和恢复正常,但在open数据库时出报下面的错误。--rman备 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
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社区 版权所有