Postgresql的三种备份方式_postgresql备份

打印 上一主题 下一主题

主题 567|帖子 567|积分 1701




既有得当小白学习的零基础资料,也有得当3年以上经验的小伙伴深入学习提拔的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比力多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,而且后续会持续更新
必要这份系统化的资料的朋侪,可以戳这里获取
利用如下命令可对全部pg数据库举行备份。
pg_dumpall –h 127.0.0.1 –p 5432 -U postgres –c  -C –f db_bak.sql
恢复方式很简单。执行恢复命令即可:
psql –h 127.0.0.1 -p 5432 -U postgres –f db_bak.sql

3. 连续归档
这种方式的计谋是把一个文件系统级别的全量备份和WAL(预写式日志)级别的增量备份结合起来。当必要恢复时,我们先恢复文件系统级别的备份,然后重放备份的WAL文件,把系统恢复到之前的某个状态。这种备份有明显的优点:

  • 不必要一个完美的同等的文件系统备份作为开始点。备份中的任何内部不同等性将通过日志重放来修正。
  • 可以结合一个无穷长的WAL文件序列用于重放,可以通过简单地归档WAL文件来达到连续备份。
  • 不必要重放WAL项一直到最后。可以在任何点制止重放,并使数据库恢复到当时的同等状态。
  • 可以连续地将一系列WAL文件输送给另一台已经载入了相同基础备份文件的机器,得到一个及时的热备份系统。

怎样举行连续归档呢?
下面的实例中,操作系统为windows 10,Postgresql的版本为9.6。
首先,必要修改postgresql.conf文件的几个参数修改如下:
wal_level = ‘replica’
archive_mode = ‘on’
archive_command = ‘copy  /y  “%p”  “D:\archive\%f”’
archive_command执行时,%p会被要被归档的文件路径所替代,而%f只会被文件名所替代。假如你必要在命令中嵌入一个真正的%字符,可以利用%%。 “D:\archive\”更换为归档日志的存放路径,要确保归档的目录是存在的。
之后必要重启数据库使配置收效。

接下来必要制作一个非排他的基础备份。Postgresql提供了排他备份和非排他备份两种备份方式,推荐利用非排他的备份方式。
1. 作为一个具有运行 pg_start_backup 权利的用户连接到服务器(不在乎是哪个数据库)而且发出命令:
Select pg_start_backup(‘backup_label’, false, false);
2. 对数据库举行一次文件系统级别的备份。即将postgresql的安装目录下的data目录及其内容复制到其他位置。
3. 在同一个连接中,发出命令:
select * from pg_stop_backup(false);
这个命令代表结束一次非排他的备份。
如今来看基于时间点的恢复。
假如你的数据库出现了故障,必要恢复到之前的某个时刻的同等的状态,就必要举行基于时间点的恢复。
其过程是:

  • 假如服务器仍在运行,制止它。
  • 假如你具有足够的空间,将整个集簇数据目录和表空间复制到一个临时位置。注意最好是拷贝而不是移动。假如你没有足够的空间,你至少要保存集簇的pg_xlog子目录的内容,由于它可能包含在系统垮掉之前还未被归档的日志。
  • 移除data 目录及其所有子文件和子目录。
  • 从文件系统备份中恢复数据库文件。注意它们要利用精确的用户恢复而且利用精确的权限。假如你在利用表空间,你应该验证pg_tblspc/中的符号链接被精确地恢复。
5.如今已经从备份中恢复了整个数据目录,接下来,你必要部分或全部删除数据目录中的下列文件,假如它们存在:
(1) postmaster.pid;(必须)
(2) pg_xlog中的文件;(必须)
(3) pgsql_tmp开头的临时文件;(可选)
(4) postgresql.auto.conf.tmp;(可选)
(5) pg_replslot目录中的文件;(可选)
(6) pg_stat_tmp目录中的文件。(可选)

  • 假如你有在第2步中保存的未归档WAL段文件,把它们拷贝到pg_xlog/中或WAL日志的归档目录中。
在集簇数据目录中创建一个恢复命令文件recovery.conf。假如你想恢复到最近的同等状态,在recovery.conf写入如下两行:
restore_command = ‘copy /y D:\archive \%f\%p’
recovery_target_timeline = ‘latest’
其中,restore_command的内容表示将归档日志文件夹中的内容拷贝到pg_xlog,其参数的含义与上文archive_command的参数含义完全相同;recovery_target_timeline = ‘latest’ 表示恢复到最近的时间点。
7. 假如要制止平凡用户在成功恢复之前连接,请修改pg_hba.conf。
8. 启动服务器。服务器将会进入到恢复模式而且进而根据必要读取归档WAL文件。恢复可能由于一个外部错误而被终止,可以简单地重新启动服务器,如许它将继承恢复。恢复过程结束后,服务器将把recovery.conf重命名为recovery.done(为了制止以后不测地重新进入恢复模式),而且开始正常数据库操作。
9. 检查数据库的内容来确保你已经恢复到了期望的状态。假如没有,返回到第1步。假如统统正常,通过恢复pg_hba.conf为正常来答应用户连接。
如许就完成了一次文件系统级别的全量备份,并实现了WAL文件级别的增量备份。

**附:**pg_start_backup() **pg_stop_backup()**做了什么?
1. pg_start_backup()
pg_start_backup() 的函数原型如下:
pg_start_backup(label text [, fast boolean [, exclusive boolean ]])
其中label是用来唯一标识这次备份操作的恣意字符串,fast 表示是否立即执行逼迫的检查点,exclusive 表示该备份是否是一个排他备份。
利用该函数时,推荐将exclusive设置为false,即非排他方式备份。
执行下面的命令:
Select pg_start_backup(‘backup_label’, false, false);
这条命令会产生三个动作:
1. 在缓冲区中创建两个变量:label_file和tblspc_map_file。前者包含WAL的起始位置、检查点的起始位置、备份方法、备份模式、备份开始时间和备份标签的名称(本例中,名称为“backup_label”)等信息;后者包含 “pg_tblspc/”中表空间符号链接的信息,假如它们存在。
2. 逼迫发生一次检查点。将检查点开始前提交的事件对数据库的修改刷新到磁盘。
3. 置写日志标志为:XLogCtl->Insert.forcePageWrites = true。把这个标志设置为true后,假如在备份期间时有其他事件修改数据库,那么系统会把被修改的数据页在修改前的完整页面都记录到WAL中,而不光仅是记录页面中的变化的部分。
为什么要将完整的页面记录到WAL中呢?
原因是在备份过程中,其他事件修改数据库,可能会造成备份后的数据存在新旧数据混淆的情况,甚至同一数据页面也会出现这种情况。假如WAL日志中仅仅记录变化的那部分的内容,就无法将数据库恢复到上次备份结束时刻的状态。以是要将修改后的完整页面写入WAL中,以保证数据库恢复后的同等性。



既有得当小白学习的零基础资料,也有得当3年以上经验的小伙伴深入学习提拔的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比力多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,而且后续会持续更新
必要这份系统化的资料的朋侪,可以戳这里获取
既有得当小白学习的零基础资料,也有得当3年以上经验的小伙伴深入学习提拔的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比力多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,而且后续会持续更新
必要这份系统化的资料的朋侪,可以戳这里获取

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表