崩溃重启后无法访问PostgreSQL,报dbus错误

崩溃重启后无法访问PostgreSQL,报dbus错误

我正在运行 Postgresql 数据库 v9.6,我重新启动了,但现在它无法启动。似乎什么都不起作用。有什么想法吗?

我正在尝试运行我的 Django 服务器:

django.db.utils.OperationalError:无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(127.0.0.1)上运行并在端口 5432 上接受 TCP/IP 连接?

我尝试执行以下命令:

$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.6 database server                                                                                   * Failed to issue method call: Unit [email protected] failed to load: No such file or directory. See system logs and 'systemctl status [email protected]' for details.

$ sudo service postgresql start
 * Starting PostgreSQL 9.6 database server                                                                                                         * Failed to issue method call: Unit [email protected] failed to load: No such file or directory. See system logs and 'systemctl status [email protected]' for details.    [fail]



(env) dominic@dom-Inspiron-7559:~/Desktop/Project
    $ systemctl status [email protected]
    Failed to issue method call: No such interface 'org.freedesktop.DBus.Properties' on object at path /org/freedesktop/systemd1/unit/postgresql_409_2e6_2dmain_2eservice


$ pg_config --version
PostgreSQL 11.2 (Ubuntu 11.2-1.pgdg14.04+1)

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 down   postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log


$ sudo pg_ctlcluster 9.6 main start
Failed to issue method call: Unit [email protected] failed to load: No such file or directory. See system logs and 'systemctl status [email protected]' for details.

$ sudo systemctl daemon-reload

编辑:

$ ps uxa|grep postgres
dominic  13786  0.0  0.0  15952  2304 pts/0    S+   17:18   0:00 grep --color=auto postgres

/var/log/postgresql$ sudo vim postgresql-9.6-main.log.1

2019-03-16 16:15:26.224 EDT [7265] modadmin@mod LOG:  could not receive data from client: Connection reset by peer
2019-03-17 15:08:10.290 EDT [12791] modadmin@mod LOG:  could not receive data from client: Connection reset by peer
2019-03-17 15:16:39.060 EDT [17891] modadmin@mod LOG:  could not receive data from client: Connection reset by peer

我今天什么也没看到..?

答案1

Dbus 是 Linux 发行版中广泛使用的进程间通信 (IPC) 解决方案。systemd 也使用它。但是,它独立于 PostgreSQL。

systemctl status命令显示一条错误消息,最有可能与该systemctl命令作为命令行应用程序无法联系您的有关systemd。Systemd 是系统的顶层守护进程,管理所有后台服务,包括 PostgreSQL。

所以你至少有两个独立的问题。请注意,此类事件在 Linux 上很少见,很可能是你运气不好。如果你的 Postgresql 中有重要数据,我希望你有某种类型的备份。

修复你的 PostgreSQL 可能更重要。显而易见的是,你的 PostgreSQL 没有启动(如果启动了,你的 django 可能已经连接上了它)。如果没有ps uxa|grep postgres给出任何可行的结果,你可以手动、更直接地检查它。

检查 postgresql 日志的结尾,最有可能位于 中/var/log/postgresql.log。您的数据库可能已损坏。如果是这样,您会大吃一惊 - 对于 postgresql,根本没有开发过低级数据库恢复工具。您需要始终进行良好的备份。有一些巧妙的方法可以恢复少量数据,但这些方法远远超出了本文的范围。

始终对系统中所有重要内容至少进行一次备份。它不应该是一个有用、高级、有效的解决方案,但它应该存在。例如,pg_dump yourDjangoDb|pxz -9ve - >/var/backups/djangopg.xz对于开发工作站来说,每日备份就足够了。

用你的结尾来延伸你的问题postgresql.log

关于 dbus,要知道服务是否仍在运行,请执行命令ps uxa|grep dbus-daemon。如果它不运行,则表示有问题。如果它运行,您可以 Dbus 本身没有任何真正重要的持久数据,因此您将能够采取更多“直接”方式使其再次运行。如果它不运行,则存在一些通信问题,这很可能与 中的某些 unix 套接字有关/run。无论如何,strace systemctl status dbus.service可以帮上大忙。

相关内容