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


推荐阅读
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
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社区 版权所有