我有两台服务器使用相同版本的postgres(9.4)。 我想制作快速克隆数据库(备份和恢复)。 据我了解"从模板"创建数据库xxx;是制作数据库副本的最快方法。
如何从一台服务器克隆到另一台服务器? 我可以使用dblink来完成这项任务吗?
我知道使用pg_dump和pg_restore(psql)的解决方案,但我认为这对我来说太慢了。 例如,5gb数据库在大约12分钟内恢复(在pg_restore中使用-j选项)并且在大约2分钟后备份。
另一种方式,可能是,我可以将一些postgres文件(/ var / lib / postgresql / *)复制到另一台服务器,并在那里运行postgres吗?如何找到这个文件?
答案 0 :(得分:1)
您不能使用来自不同数据库集群(在相同或不同计算机上)的数据库作为模板来创建新数据库,以便将其用完。
将数据库从一个群集复制到另一个群集的唯一现有方法是pg_dump
/ pg_restore
。
物理副本是最快的方法,但您不能将单个文件或数据库从一个数据库集群复制到另一个数据库集群。
如果您不介意复制整个数据库集群,可以选择停止和删除目标数据库集群,执行pg_basebackup -X stream
以创建源数据库集群的物理备份,编辑配置必要时开始新的副本。
如果pg_basebackup
对您来说太慢,您可以使用pg_start_backup
和pg_stop_backup
“手动”执行在线备份,并使用您拥有的最快技术复制其间的文件。< / p>
如果停止源数据库集群没有问题,那么你就不必搞乱恢复,你会更快。
答案 1 :(得分:0)
劳伦斯说,你无法复制模板。原因是它需要集成到postgres的共享目录中,如pg_database
等,因为它共享数据库范围的资源,如事务日志(pg_clog
)。
理论上,如果所有元组都被VACUUM FREEZE
冻结,那么实际上可以 从另一台机器复制模板。但是,您必须进行一些手动设置才能集成复制的模板,并且它容易出错并且存在风险。你需要非常了解postgres内部。
这真的不值得。