系统更新失败后从 Postgresql 数据库恢复数据

系统更新失败后从 Postgresql 数据库恢复数据

首先,我想澄清一下这个问题已经询问过在 askubuntu 中,但我还是删除了它,因为我几乎没有收到任何反馈。如果这违反了 SU 协议,请告诉我。


欢迎来到我的混乱之中……

情况是:

  • Ubuntu 软件正在进行一些“重要”更新(可能有很多更新,因为距离我上次更新已过去 9 个多月了)。

  • 更新似乎停止工作(更新进度条冻结),没有任何解释发生了什么。有一个错误通知,除了点击“报告”按钮外,没有给我太多信息或任何处理方法。

  • 在使用电脑大约 8 小时后,我本以为问题会自行解决,但我发现进程条仍然冻结。我祈祷好运,然后关闭电脑。

  • 现在笔记本电脑无法在 Ubuntu 上启动(仍然有 Windows,没有尝试启动它,但我猜它仍然有效)。

  • 大型且重要的 Postgresql 数据库存储在笔记本电脑中/var/lib/postgresql/9.5/main(是的,前一天关闭笔记本电脑时我真的很累,没有预料到这一点......这真是愚蠢的事情;孩子们不要在家里这样做)。

  • 制作了一个带有 Ubuntu 16.04 live 的可启动 USB 棒,目的是在重新安装 Ubuntu 之前访问我的文件并进行备份。

  • 无法备份提到的数据库(意思是,可以使用 Nautilus 或通过终端 + sudo 复制/粘贴文件夹),它说内容/var/lib/postgresql/9.5/main不可读(我没有权限)。我的主目录问题较少,我设法进行了备份(除了几个不重要的例外)。

我该怎么办?是否可以从数据库复制文件以进行备份?此外,我之后如何访问该数据库?

谢谢你的时间...


更新sudo /bin/bash:我按照 davidgo 的建议,使用成功备份了我的文件cp(将它们保存到外部硬盘中)。

然后我在我的电脑上从头安装了 ubuntu,安装了 posgresql-9.5(添加了 davidgo 提到的 Postgres PGDG repo),并将文件复制到相同的原始位置(使用cp -rnP /pathto/backupfolder /var/lib/postgresql/9.5/main)并将所有权更改为“postgres”。

现在我的问题是无法启动 postgresql 客户端(psql)。这是命令行输出:

user@machine:~$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

查看文档后,我发现我可以使用pg_ctl来启动服务器,但在 Ubuntu 中,我预计会使用它pg_ctlcluster。好的,所以我尝试这样做:

user@machine:~$ su - postgres
Password: 
postgres@machine:~$ pg_ctlcluster 9.5 main status
pg_ctl: server is running (PID: 1034)
/usr/lib/postgresql/9.5/bin/postgres "-D" "/var/lib/postgresql/9.5/main" "-c" "config_file=/etc/postgresql/9.5/main/postgresql.conf"

我是一个相当笨拙的 PostgreSQL 用户,所以这可能是我现在无法理解的非常简单的事情。再次重申,任何帮助都是非常受欢迎的!

答案1

为了实现这个功能,步骤如下:

  1. 在新驱动器上安装 UBUNTU 的新副本,以免覆盖 postgres 文件。在新实例上安装 Postgres 9.5(您可能需要或不需要添加Postgres PGDG 存储库去做这个)

  2. 将旧的 Postgres 文件复制到新系统的同一位置(通常为 /var/lib/pgsql/9.5)。由于您在这里遇到困难,您应该尝试从命令行以 root 身份执行此操作。(我假设 SELinux 不起作用或干扰,如果是,请禁用它)。[您可以将磁盘作为第二个驱动器放入,也可以使用 USB 外壳] 要获得 root 访问权限,请键入“sudo /bin/bash”

  3. 将 postgresql 文件的所有权权限更改为 postgres 用户。

  4. 启动 Postgres!

答案2

在我的例子中,shared_buffers 太大导致了失败状态,我将其减少到 128MB 并重新启动,然后工作正常,在操作系统崩溃到新操作系统后,我复制了数据目录。

相关内容