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

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

Postgres文档http://www.postgresql.org/docs/8.3/static/app-pgdump.html对此没有赘述。

评论

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

#1 楼

从手册中:


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


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

评论


当我读到“您可以信任PostgreSQL中的数据”时,我实际上会大声笑:)

–FrançoisBeausoleil
2012年2月23日14:36

链接到手册会很好

– Pablo Fernandez
2014年7月22日在0:09

@PabloFernandez:完成!

–弗兰克·海肯斯(Frank Heikens)
2014年7月22日在4:29

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

–tryp
17年4月26日在12:59

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

–卢西亚诺·安德雷斯·马蒂尼(Luciano Andress Martini)
18年5月29日在11:40

#2 楼

转储从设置TRANSACTION ISOLATION LEVEL SERIALIZABLE开始。

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

引用:


备份将仅看到在设置隔离级别之前提交的事务。不属于此转储的一部分。

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

#3 楼

pg_dump开始一个事务,类似于任何其他长时间运行的查询将如何工作。一致性保证来自MVCC实现。在这些规则内,转储将始终保持一致。 pg_dump严格遵守顺序,并在整个数据库上获取一个读取锁以将其转储。对于大多数人来说,这就是他们的期望,并且所使用的机制永远不会造成任何麻烦。主要的并发风险是,在运行转储时,尝试更改数据库结构的客户端将被阻止。但这不会影响转储的质量。

#4 楼

首先,抱歉在这个旧主题上回答。但是从我的经验来看,我不能确认您可以信任pg_dump /的声明。当然,我按照建议从实时系统使用pg_dump进行了所有备份。但是在进行第一次备份检查后,我发现所有转储都具有不同的大小。随机恢复其中一些后,我发现缺少某些表。因此,我开始分析为什么会发生这种情况,并且我发现如果覆盖应用程序(例如应用服务器,锁定某些表和pg_dump直到它们被释放才等待。每次都需要我在备份期间停止服务器,这不是一个好办法。 。

评论


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

–罗马
15年5月27日在17:02



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

–丹尼斯·诺尔特
2015年7月9日在11:53

您的陈述或者表明一个严重的错误(是否提交了错误报告?),转储数据库的方式中的严重错误或某种误解。缺乏任何事实,无法在其中做出决定。

– dezso
2015年7月9日在12:02