如何从硬盘驱动器上的 postgres 数据目录恢复数据?

Pir*_*App 4 postgresql recovery restore disaster-recovery

  • 我有一台旧 iMac,不久前就停止工作了
  • 我每周对正在更新的数据库进行备份,其中包含来自多个 rss 提要的提要项目
  • 我仍然缺少上周的数据
  • 我目前拥有旧机器的硬盘,其中包含 postgres 数据目录(它是基于 Intel 的 iMac)
  • 我的新机器是基于 Apple M1 的 mac mini,我想加载所有这些提要项目
  • 我想从包含旧 postgres 文件的硬盘驱动器上的数据目录中的名为 ch_v3 的特定数据库恢复名为 feed_items 的特定表
  • 如何将旧硬盘上以原始格式存储的 100k+ feed 项目恢复到新机器上的新 postgres 安装中?

小智 7

如果您需要一种恢复数据库的方法,但没有可用的基于 Intel/AMD 的系统,那么 Amazon、DigitalOcean 或其他地方的虚拟机可能会满足您的需求。如果您\xe2\x80\x99从未有过Amazon Web Services帐户,您甚至可以为\xe2\x80\x9cfree\xe2\x80\x9d执行所有这些操作。

\n

该过程可能是这样的:

\n
    \n
  1. 向 VPS 提供商注册帐户
  2. \n
  3. 使用您选择的操作系统对其进行配置。为了这个例子,我\xe2\x80\x99将使用Ubuntu Server 20.04和PostgreSQL 12
  4. \n
  5. 安装 PostgreSQL
    \n
    sudo apt install postgresql postgresql-contrib\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
  7. 通过连接到数据库确认安装是否成功:\n
    sudo -i -u postgres\npsql\n
    Run Code Online (Sandbox Code Playgroud)\n
  8. \n
  9. 只要能连接,那么\xe2\x80\x99就万事大吉了。让\xe2\x80\x99s 退出:\n
    \\q\n
    Run Code Online (Sandbox Code Playgroud)\n
  10. \n
  11. 现在我们需要停止服务器:\n
    service postgresql stop\n
    Run Code Online (Sandbox Code Playgroud)\n
  12. \n
\n

基础知识就位后,现在可以进行一些文件管理了。

\n
    \n
  1. 删除 PostgreSQL 数据目录中的文件\n
    sudo rm -Rf /var/lib/postgresql/12/main\n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. 将旧数据文件复制到该位置
  4. \n
  5. 相应地设置文件权限:\n
    sudo chown -R postgres:postgres /var/lib/postgresql/12/main\nsudo chmod -R u+rwx,g-rwx,o-rwx /var/lib/postgresql/12/main\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
  7. 重新启动 PostgreSQL\n
    sudo service postgresql start\n
    Run Code Online (Sandbox Code Playgroud)\n
  8. \n
  9. 取回您的数据
  10. \n
\n

总而言之,这可能需要大约 30~45 分钟的工作时间。希望它能让您恢复丢失的记录。

\n
\n

注意:如果您选择创建 AWS 账户并使用其免费套餐选项,请记住在完成后终止实例,以避免一年后产生任何意外费用。

\n
\n
\n

笔记2:因为这些是虚拟机,所以如果出现任何问题,只需终止计算机并重新启动即可。

\n
\n