![系统更新失败后从 Postgresql 数据库恢复数据](https://linux22.com/image/1529389/%E7%B3%BB%E7%BB%9F%E6%9B%B4%E6%96%B0%E5%A4%B1%E8%B4%A5%E5%90%8E%E4%BB%8E%20Postgresql%20%E6%95%B0%E6%8D%AE%E5%BA%93%E6%81%A2%E5%A4%8D%E6%95%B0%E6%8D%AE.png)
首先,我想澄清一下这个问题已经询问过在 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
为了实现这个功能,步骤如下:
在新驱动器上安装 UBUNTU 的新副本,以免覆盖 postgres 文件。在新实例上安装 Postgres 9.5(您可能需要或不需要添加Postgres PGDG 存储库去做这个)
将旧的 Postgres 文件复制到新系统的同一位置(通常为 /var/lib/pgsql/9.5)。由于您在这里遇到困难,您应该尝试从命令行以 root 身份执行此操作。(我假设 SELinux 不起作用或干扰,如果是,请禁用它)。[您可以将磁盘作为第二个驱动器放入,也可以使用 USB 外壳] 要获得 root 访问权限,请键入“sudo /bin/bash”
将 postgresql 文件的所有权权限更改为 postgres 用户。
启动 Postgres!
答案2
在我的例子中,shared_buffers 太大导致了失败状态,我将其减少到 128MB 并重新启动,然后工作正常,在操作系统崩溃到新操作系统后,我复制了数据目录。