什么是建议的进行PostgreSQL数据库备份的方式:pg_dump还是pg_basebackup?

23

PostgreSQL服务器中有两种不同的工具:

  • pg_dump
  • pg_basebackup

这些工具有什么区别?
哪一个可用于创建数据库备份?

1个回答

34

pg_dump创建一个逻辑备份,即一系列的SQL语句,当执行时,会创建一个逻辑上与原始数据库相似的新数据库。

pg_basebackup创建一个物理备份,即数据库集群构成文件的副本。您必须使用恢复操作使此备份一致。

主要区别如下:

  • pg_dump通常需要更长的时间,并创建较小的备份。

  • 使用pg_dump可以备份一个数据库或数据库的部分内容,而pg_basebackup总是备份整个集群。

  • 使用pg_dump创建的备份是完整的,而使用pg_basebackup创建的备份需要WAL归档文件才能恢复(除非使用了默认选项-X stream,在这种情况下,备份包含使备份一致所需的WAL段)。

  • 使用逻辑备份只能恢复数据库在备份时的状态,而使用物理备份可以在备份结束后的任意时间点进行恢复,前提是您已经归档了所需的WAL段。

  • 创建备用服务器需要使用pg_basebackup,而pg_dump无法实现。

  • 使用pg_dump进行的备份可以在运行在任意操作系统上的数据库上进行恢复,只要PostgreSQL版本等于或高于pg_dump的版本。相比之下,pg_basebackup只能在与原始数据库版本和平台相同的环境中进行恢复。


3
当使用pg_basebackup创建备份时,既然“pg_basebackup总是备份整个集群”,为什么还需要WAL归档呢? - beatrice
8
由于备份不一致——在复制过程中文件已经发生了更改。 - Laurenz Albe
2
pg_dumppg_basebackup可以同时运行吗?比如说我在主服务器上设置了每天1点运行的pg_dump,同时从10点到3点之间从主服务器拉取数据的pg_basebackup也在从备用服务器上运行。这两个进程会在1点交叉,这样做是否“危险”?谢谢@LaurenzAlbe - padjee
4
@padjee 不,这不危险。但是pg_dumppg_basebackup都会给服务器带来压力,因此您的正常工作负载的性能可能会受到影响。 - Laurenz Albe
我可以使用备份来在其他主要的PostgreSQL版本上进行还原吗? - undefined
我已经添加了一个答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接