PostgreSQL:在另一个驱动器上查找 Postgresql 数据库文件并恢复它

PostgreSQL : Find Postgresql database file on another drive and restore it

我正在处理 PostgreSQL 数据库,最近我们进行了服务器升级,在此期间我们将驱动器从 2Tb raid 硬盘更改为 SSD。现在我将 RAID 驱动器安装在一个分区上,甚至可以访问它。

接下来我要做的是从安装的驱动器中取出数据库并将其恢复到当前 运行 PostgreSQL。我怎样才能做到这一点?

root@check03:/mnt/var/lib/postgresql/9.1/main/global# ls
11672      11674  11805  11809      11811  11813_fsm  11816  11820  11822  11824_fsm  11828  11916  11920        pg_internal.init
11672_fsm  11675  11807  11809_fsm  11812  11813_vm   11818  11820_fsm  11823  11824_vm   11829  11918  pg_control   pgstat.stat
11672_vm   11803  11808  11809_vm   11813  11815      11819  11820_vm   11824  11826      11914  11919  pg_filenode.map
root@check03:/mnt/var/lib/postgresql/9.1/main/global# cd ..

如您所见,我可以访问驱动器和文件夹,但我不知道下一步该怎么做。请告诉我。非常感谢。

您需要相同版本的 PostgreSQL (9.1),以及相同或更高的次要版本。将 main/ 及其下方的所有内容复制到新位置。复制旧实例的配置并调整路径以适应新位置(main/ 是 ''data directory''(有时也称为 PGDATA))。启动新实例并仔细查看日志。您可能应该重建任何索引。

另请阅读精美文档中的 file layout

编辑:如果您有机会 运行 旧配置,请阅读 backup and restore,这是一种更安全的数据传输方式。

  • Postgres 二进制文件必须是同一版本
  • 确保 postgres 不是 运行
  • 使用 cp -rfptar | tarcpio 或您喜欢的任何内容进行复制。确保保留文件所有者和模式(顶级目录必须是 0700,归 postgres 所有)
  • 确保 postgres-startup(在 /etc/init.d/postxxx 中)引用新目录;有时有一个环境变量 $PGDATA 包含 postgres 数据目录的名称;也许您也需要对 new_directory/postgres.conf 进行更改(pg_log 等)
  • 为了安全,重命名数据目录
  • 重启 Postgres
  • 尝试连接;检查日志。

额外:

  • 经验丰富的 unix 管理员(如 BOFH ;-) 可能想要使用挂载点 and/or 符号链接(而不是复制)。别客气。 YMMV
  • 经验丰富的 DBA 可能想要创建一个表空间,将其指向新位置并(有选择地)将数据库、模式或表移动到新位置。