您好,我可以使用 postgresql 开始流式复制,通过执行以下命令复制数据库文件:
select pg_start_backup('clone', true);
没错,但问题是我需要将 /var/lib/postgresql/data 中的所有数据库文件复制到一台服务器到另一台服务器。例如,由于索引,这些文件真的很大。
我想知道是否可以使用简单的转储并在从站上恢复它来做同样的事情,什么是更小更快的网络传输,它会起作用吗?我应该做什么工作?
您好,我可以使用 postgresql 开始流式复制,通过执行以下命令复制数据库文件:
select pg_start_backup('clone', true);
没错,但问题是我需要将 /var/lib/postgresql/data 中的所有数据库文件复制到一台服务器到另一台服务器。例如,由于索引,这些文件真的很大。
我想知道是否可以使用简单的转储并在从站上恢复它来做同样的事情,什么是更小更快的网络传输,它会起作用吗?我应该做什么工作?
如果没有数据目录的物理副本,则无法启动流式复制;通常使用
pg_basebackup
命令创建。其原因与流式复制和 WAL 运输复制的作用有关。在这两种情况下,您都使用 postgresql 的恢复机制将预写日志应用到数据目录。因此,为了不破坏数据库一致性,您必须将相同的更改集应用到相同的起点,并且您只能复制整个数据库集群。这也是为什么您不能中断流式传输或删除 WAL 段的原因,因为一旦中断了连续性,数据库服务器就无法保证它处于一致状态。
在 postgreSQL 10 或更高版本中,您可以使用逻辑复制来仅复制集群中的一个数据库甚至单个表。在这种情况下,您可以从数据库的“逻辑副本”开始,例如
pg_dump
.