在服务器之间传输 PostgreSQL 数据库

在服务器之间传输 PostgreSQL 数据库

是否可以直接在两个 PostgreSQL 服务器之间传输 PostgreSQL 数据库?

我目前正在设置生产数据库的“开发”版本,方法是使用 pg_dump 将整个数据库序列化为一个文件,下载该文件,然后使用 pg_restore 将数据库加载到开发服务器上。但是,随着数据库的不断增长,这个过程现在需要几个小时。有没有办法简单地“连接”两台服务器并直接传输数据库,而不是这个漫长的转储/下载/恢复过程?

答案1

请注意,我只使用过 MySQL,但 PostegreSQL 应该不会有太大不同。

如果 pg_dump 是我的 mysqldump,那么你不能直接将输出导入 pg_restore 吗?这是我能想到的最直接、最快的方法。其他方法只会增加开销

答案2

您可能考虑的一件事是拥有两个开发数据库,​​因此您使用一个数据库,而另一个数据库则经历 pg_dump|pg_restore 循环。尽管我从未遇到过花费超过几分钟的数据库,所以我从未调查过它是否可能--format tar比默认格式更快。

答案3

在 PostgreSQL 中,有两种类型的备份和复制可实现您的目标。现在您正在使用逻辑备份,请尝试物理备份:

物理冷备份意味着将文件(如果需要,也包括 rdbms 二进制文件)复制到一个地方,以便在出现问题时可以将其恢复。

优点:物理冷备一般比逻辑热备的速度要快得多。

缺点:备份期间必须关闭数据库群集。您不能使用冷备份来升级 PostgreSQL 数据库群集。

然后进行冷物理备份您需要:

  • 停止数据库服务器
  • 将数据库文件物理复制到开发服务器(您也可以使用 rsynch)
  • 重新启动服务器

如果您无法停止集群,那么最好使用新版 9.0 版 postgreSQL 设置异步复制。

答案4

如果两台服务器具有相同的架构,那么您只需复制数据目录即可。通常,您必须关闭服务器才能执行此操作或设置 WAL 归档。但对于创建测试数据库,无论如何执行此操作并在之后清理您的副本可能就足够了pg_resetxlog

您可以使用 rsync 来减少后续运行中需要复制的数据量。

如果两台服务器有不同的架构,那么pg_dump就是唯一的路线。

相关内容