求助,升级了一下两年没升级的 archlinux, postgresql 挂了。。

2017-04-14 01:43:13 +08:00
 fl2d
以前没咋用过 linux 。最近用一个两年没 syu 的 archlinux 服务器,装啥都出奇怪的问题,但也不敢升级,上面跑着好多东西呢,怕出问题。刚才实在忍不了了,战战兢兢的 pacman -syu 了,结果,当真, owncloud 挂了,分析是由于 postgresql 挂了引起的。求助,哪位能指点一下么。。

还有,如果删除再重装 pgsql 的话,原来的数据库咋保留?网上查的都是在服务运行的状态下 dump ,再升到高版本的 reload ,可我已经升级了,并且服务也不启动了。


# systemctl start postgresql

Job for postgresql.service failed because the control process exited with error code.
See "systemctl status postgresql.service" and "journalctl -xe" for details.



# systemctl status postgresql.service

postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2017-04-14 02:09:00 ; 7min ago
Process: 26394 ExecStop=/usr/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast (code=exited, status=0/SUCCESS)
Process: 5814 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data (code=exited, status=1/FAILURE)
Main PID: 17344 (code=exited, status=0/SUCCESS)

Apr 14 02:09:00 xxx.xxx systemd[1]: Starting PostgreSQL database server...
Apr 14 02:09:00 xxx.xxx postgres[5814]: An old version of the database format was found.
Apr 14 02:09:00 xxx.xxx postgres[5814]: You need to dump and reload before using PostgreSQL 9.6.
Apr 14 02:09:00 xxx.xxx postgres[5814]: See http://www.postgresql.org/docs/9.6/static/upgrading.html
Apr 14 02:09:00 xxx.xxx systemd[1]: postgresql.service: Control process exited, code=exited status=1
Apr 14 02:09:00 xxx.xxx systemd[1]: Failed to start PostgreSQL database server.
Apr 14 02:09:00 xxx.xxx systemd[1]: postgresql.service: Unit entered failed state.
Apr 14 02:09:00 xxx.xxx systemd[1]: postgresql.service: Failed with result 'exit-code'.



# journalctl -xe

Unit postgresql.service has begun starting up.
Apr 14 02:09:00 xxx.xxx postgres[5814]: An old version of the database format was found.
Apr 14 02:09:00 xxx.xxx postgres[5814]: You need to dump and reload before using PostgreSQL 9.6.
Apr 14 02:09:00 xxx.xxx postgres[5814]: See http://www.postgresql.org/docs/9.6/static/upgrading.html
Apr 14 02:09:00 xxx.xxx systemd[1]: postgresql.service: Control process exited, code=exited status=1
Apr 14 02:09:00 xxx.xxx systemd[1]: Failed to start PostgreSQL database server.
-- Subject: Unit postgresql.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit postgresql.service has failed.
--
-- The result is failed.
Apr 14 02:09:00 xxx.xxx systemd[1]: postgresql.service: Unit entered failed state.
Apr 14 02:09:00 xxx.xxx systemd[1]: postgresql.service: Failed with result 'exit-code'.
5110 次点击
所在节点    问与答
41 条回复
sujin190
2017-04-14 13:19:17 +08:00
日志中已经写了,要用 PostgreSQL 9.6 版本启动,应该是升级系统的时候自动升级了 PostgreSQL 了,你重新安装一个 9.6 版本就是了啊,源里没有的话,可以从官网下载,编译,然后在修改一下配置文件就好了
sujin190
2017-04-14 13:20:14 +08:00
@fl2d #17 你可以吧 /var/lib/postgres/data cp 成 /var/lib/postgres/8.4/data ,修正一下权限就行了
jy02201949
2017-04-14 13:44:25 +08:00
当初就是冲着大家说 arch 滚不死去的,然后。。。我换了 ubuntu
msg7086
2017-04-14 13:55:07 +08:00
@jy02201949 Ubuntu 连滚都滚不起来了 hhh
standin000
2017-04-14 14:00:14 +08:00
archlinux 滚不死是假象,一定要每次升级时遵循升级文档,一次都不能少。。。
fl2d
2017-04-14 14:07:40 +08:00
@ho121

果然 cache 里有以前的安装包!
可是不知为啥, pacman -Rns postgresql 后,再用 psql -V 查看版本号,还能显示版本号,并且是最新的,很奇怪。。
用 pacman -U name 安装上从 cache 里找到的老版本后,还是无法启动服务。。

应该是原来的 postgresql 删除不彻底,或者版本变量错误造成的吧?
wangxiyu191
2017-04-14 14:08:22 +08:00
arch 现在这么优秀了么。。两年滚一次系统都不挂了?
NonClockworkChen
2017-04-14 14:11:29 +08:00
@msg7086 大神能解释一下什么叫滚,是 Rolling Release,百度了一下,没这方面的介绍..
jarlyyn
2017-04-14 14:13:05 +08:00
系统服务上 docker 是一个好习惯。
AstroProfundis
2017-04-14 14:49:30 +08:00
讲道理楼主这个锅不应该是 Arch 的,最多也只能甩给 postgresql, 我个人是觉得搞大动作前不备份数据是楼主自己的锅...

首先备份 db 数据文件,卸载当前版本,用上面 cache 里面找到的旧包安装,尝试启动后 dump
如果装了旧版还是不能启动,你至少看到 cache 知道版本号了,找个一样或者尽可能接近的版本在别的机器上安装好,复制数据文件过去启动起来 dump, 完了回这边的最新版导入

以及两年不滚的 Arch 不做备份&&细读文档就直接开搞是真猛士,系统没挂已经很给面子了....
msg7086
2017-04-14 15:01:22 +08:00
@NonClockworkChen 过奖了,咱不是大神。

固定版本的发行版对单个版本内的软件更新是有特殊要求的,就是原则上只能加入 bug fix 而不能更新到新功能版本,或者加入新功能补丁。
比如说 CentOS 6.0 发布时候用的内核是 2.6.32 ,那么 6.X 永远只会用这个内核版本。会打入无数的补丁,但是永远也不会升级到 3.X 。普通的软件包也是一样,永远只打补丁,不更新功能版本。
要用新内核,或者新软件,只能上 CentOS 7.x 。(或者用第三方版本库,比如来自 Fedora 的 EPEL )
一旦一个版本发行了,这个版本的软件就被「冻结」了。

滚动更新则相反,软件版本不会冻结,而是持续加入新功能,更新到新版本,比如 Arch ,内核出 4.9 了,他很快就会跟进,出 4.10 了,也马上会跟。应用程序也一样, PHP7 出了,也马上就会跟上, Nginx 有了 http2 ,也马上就会跟上。
这种更新方式就叫做滚动更新。没有固定的发行版本,每时每刻镜像里的软件包都能打包出一个 Nightly 版本。只要你不停更新软件包,就能一直保持在科技前沿。

固定发行版的好处是软件平台稳定,比如 CentOS 6 发布以后,可以用很多年,那么为其编写的程序也可以长期稳定工作,而不用担心系统更新了以后出现不兼容情况。
坏处就是,时空完全冻结在发布的那个年代了,不要想着用现代甚至未来的黑科技。
滚动更新则相反,传统软件很难开发,因为软件版本更迭太快。但是对于互联网行业来说,随时可以用上最新的技术就是其巨大的优势。
MFC
2017-04-14 15:11:09 +08:00
@sagaxu 这东西至今都不如 mysql 流行,看来是有道理的。如果数据库已经很大了,比如几十 G ,那导出导入还不得痛苦死。。。。就为软件升个级就这么折腾。。。。
NonClockworkChen
2017-04-14 15:11:10 +08:00
@msg7086 谢谢,解释的很详细,明白了.
msg7086
2017-04-14 15:49:26 +08:00
@MFC 几十 G 真不大其实。上 T 的数据库那就(手动滑稽
kkk123
2017-04-14 16:33:46 +08:00
邮件服务器当初被安利装了 psql ,后来想升级发现好可怕。。。先用着不升了,同样入坑的还有 maria...,还是 mysql 妥妥的
fl2d
2017-04-14 19:04:00 +08:00
@AstroProfundis

请问,在类似系统装老版本 postgresql 后,然后怎么导入老数据库啊?
直接复制到数据文件夹就行了? initdb 怎么正啊?

现在装了老版本,还是一样的提示, An old version of the database format was found 。。 T T
pubby
2017-04-14 19:19:21 +08:00
@kkk123 mysql 也一样的,当初一个几年前老版本的 slave 库,升级到 5.7 也起不来,需要安装几个中间版本一步步升级数据库
AstroProfundis
2017-04-14 19:39:35 +08:00
@fl2d 正常情况应该是直接复制过去启动就行了,还提示版本旧的话.......也许你两年前升级了数据库但没有重启过所以内存里面跑着的一直是更旧的版本?(纯猜测了,但换成我的话这个时候就再找更老的版本一点点往回试...当然备份一定得做好放到安全的地方)
DesignerSkyline
2017-04-14 19:55:59 +08:00
@msg7086 蕾姆酱讲得很清楚了!赞一个
qceytzn
2017-04-14 21:36:21 +08:00
@kkk123 maria 不就是 CentOS 7 里的 mysql 吗??我在新的 CentOS 7 里安装 mysql 的话最后都是给我装的 maria

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354746

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX