在实时数据库上运行pg_dump是否会产生一致的备份?


37

我有一个不断修改的3GB数据库,我需要在不停止服务器的情况下进行备份(Postgres 8.3)。

我的pg_dump运行5分钟。如果在此过程中修改了数据怎么办?我可以获得一致的备份吗?我不想找出灾难发生的时间。

Postgres文档http://www.postgresql.org/docs/8.3/static/app-pgdump.html对此没有任何说明。


4
嗨罗迪克。我强烈建议您灾难来袭之前测试您的还原过程。设置另一台计算机并使用其中一个备份进行还原以对其进行测试。
德里克·唐尼

Answers:


53

手册

即使同时使用数据库,它也会进行一致的备份。

是的,您可以信任备份。当然,它是PostgreSQL,您可以信任PostgreSQL中的数据。


10
我简直LOL'd当我读到“你可以在PostgreSQL相信你的数据” :)
弗朗索瓦博索莱伊

链接到手册将会很好
Pablo Fernandez

1
@PabloFernandez:完成!
Frank Heikens 2014年

1
但是,对活动数据库进行逻辑备份将锁定您的表,请不要错过此信息。也许你会发现一些提示compose.com/articles/...
TRYP

那么,请问有什么好笑的呢?我应该停止使用postgresql吗?
777Anon

12

pg_dump开始一个事务,类似于任何其他长时间运行的查询将如何工作。一致性保证来自MVCC实现。在这些规则内,转储将始终保持一致。

MVCC的所有模糊部分都围绕着诸如其他客户可见的UPDATE事务顺序以及如何获取锁之类的事情。pg_dump严格遵守顺序,并在整个数据库上获取读取锁以将其转储。对于大多数人来说,这就是他们的期望,并且所使用的机制永远不会造成任何麻烦。主要的并发风险是,在运行转储时,尝试更改数据库结构的客户端将被阻止。不过,这不会影响转储的质量。


11

转储从设置开始TRANSACTION ISOLATION LEVEL SERIALIZABLE

请阅读有关事务隔离的手册 ,例如有关此内容用户列表讨论

引用:

备份将仅看到在设置隔离级别之前提交的事务。

基本上,pg_dump设置事务隔离级别之后的所有内容都不属于此转储的一部分。

在此期间,读/写操作不受影响(锁定)。


-1

首先,抱歉在这个旧主题上回答。但是根据我的经验,我无法确认您可以信任pg_dump /的声明。

我一个月前转投Postgres项目。当然,我按照建议使用实时系统中的pg_dump进行了所有备份。但是在进行第一次备份检查后,我发现所有转储都具有不同的大小。随机恢复其中一些后,我发现缺少某些表。因此,我开始分析为什么会发生这种情况,并且我发现,如果覆盖应用程序(例如,应用服务器),锁定某些表和pg_dump直到发布它们时才等待。每次都需要我在备份期间停止服务器,这不是一个好的解决方案。

所以我仍然在寻找修复程序,但是正如我所说,我完全不同意您可以信任pg_dump的声明。


如果发生这种情况,在pg_dump中将是一个严重的问题。您使用的是哪个版本?我的问题是3年前,现在我使用的是9.3和Amazon reds,它们显然使用pg_dump进行实时备份。他们不会错。
罗马

您可以信任pg_dump进行序列化备份(有关链接/文档和一些详细信息,请参见我的回答)。但是,在阅读期间,我确实读过您不应更改数据库本身的结构,尽管我无法对此进行更深入的了解。 。由于我们只进行插入/更新/删除操作,因此我无法对表创建进行评论。对我们来说,我只是确保在pg_dump期间不创建表。
丹尼斯·诺尔特

2
您的陈述或者表明一个严重的错误(是否提交了错误报告?),转储数据库的方式中的严重错误或某种误解。缺乏任何事实,无法在其中做出决定。
dezso 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.