1
cnnblike 2017-04-14 02:20:23 +08:00 1
You need to dump and reload before using PostgreSQL 9.6.
|
2
fl2d OP @cnnblike
为了让 pgsql 启动,我需要 dump ;为了 dump ,需要启动 pgsql 。死循环了啊。。 # pg_dumpall > ./backdir/pgsql.old pg_dumpall: could not connect to database "template1": could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/run/postgresql/.s.PGSQL.5432"? |
3
sagaxu 2017-04-14 06:00:20 +08:00 via Android 1
升级 pgsql 前没读 release notes 么,跨度比较大的版本之间,二进制 db 文件是不兼容的,要用老版本 pgsql 启动 dump 出兼容性高的导出格式,然后导入到新版本 pgsql
|
5
t123yh 2017-04-14 08:44:13 +08:00 via Android 1
@fl2d 可以的,删掉 pgsql ,手动装老版本就可以了,最好把数据库文件手动复制出来备份一下。
|
6
kemad 2017-04-14 09:16:16 +08:00 1
|
7
binjoo 2017-04-14 09:18:13 +08:00
生产上的版本更新难道不应该很慎重吗?
|
8
ChasYuan 2017-04-14 09:19:39 +08:00
两年没升级都敢这么玩。心疼~
|
9
fl2d OP @t123yh
把 /var/lib/postgres/data 考出来, 然后删了现在的 pgsql ,然后再装老版本,再把 data 文件夹拷回去,是吧? 多谢!我试试! 重新装了老版本后,还需要 import 老数据库之类的不? |
12
noqwerty 2017-04-14 09:29:36 +08:00 via iPhone
感觉到了 docker 的重要性
|
13
klesh 2017-04-14 10:15:26 +08:00 via Android 1
我记得是有个升级的工具的 pg 会带,就是 10 楼说的。你查下文档
|
14
klesh 2017-04-14 10:16:03 +08:00 via Android
另生产环境用 arch 有点不太妥当吧
|
15
msg7086 2017-04-14 11:03:47 +08:00 1
我给你的建议,去 Linode/DO/Vultr 任何一个能按小时算钱的地方。
开一台新机器,装一个 Debian 老版本系统,找版本对应的,数据复制进去, dump 出来。 再开一台新机器,装一个 Debian 最新版的系统,数据 dump 回去,然后检查数据完整性。 一切都 OK 的话,再删掉原机器上的库。 永远不要在没有验证新数据的情况下删除旧数据。 |
16
msg7086 2017-04-14 11:05:03 +08:00
另外 Arch 天生就是必须要经常滚的,你两年不滚的话妥妥要出事啊。
不滚的话, CentOS / Debian 系都是很好的。 |
17
fl2d OP @t123yh
我发现我不知道以前老版本是啥啊。。而且,我看文档说,大版本才有不兼容的问题,小版本问题不大啊, 2 年前也是 9.4 9.5 了,现在 9.6 。我 pacman -Rns postgresql 然后再用 pacman -S postgresql 装了几遍,还不行。。 @murusu @klesh 有点奇怪,按照 pg_upgrade 文档说明,数据目录下面应该有老版本和新版本两个目录,类似于 /var/lib/postgres/8.4/data /var/lib/postgres/9.6/data 可是我的数据目录只有一个 /var/lib/postgres/data 。。 根据我贴出来的 systemctl status postgresql.service 的输出结果,能确认是久数据库造成的无法启动么? 或者那其实只是个 warning 而不是 error ? @msg7086 这个服务器以前不是我玩儿的。我有升级强迫症,要换我,肯定整天 syu 。。 |
18
fl2d OP @t123yh
@murusu @klesh @msg7086 额。。发现了。。源代码里显示完提示就 exit 了。。确实是由于老版本数据格式造成的。。 可是我咋升级啊?服务不能启动, dump 不能用。 pg_upgrade 也完全和文档里对不上啊。。。 还有,请问,怎能确定我之前的版本号啊? 我下到我的 mac 里,装老版本 pgsql , dump 一下,再恢复会去,可以不? # Check version of existing PGDATA + if [ x`cat "$PGDATA/PG_VERSION"` = x"$PGMAJORVERSION" ] + then + : A-OK + elif [ x`cat "$PGDATA/PG_VERSION"` = x"$PREVMAJORVERSION" ] + then + echo $"An old version of the database format was found." + echo $"See https://wiki.archlinux.org/index.php/PostgreSQL#Upgrading_PostgreSQL" + exit 1 + else + echo $"An old version of the database format was found." + echo $"You need to dump and reload before using PostgreSQL $PGMAJORVERSION." + echo $"See http://www.postgresql.org/docs/$PGMAJORVERSION/static/upgrading.html" + exit 1 + fi |
19
ho121 2017-04-14 12:31:43 +08:00 via Android 1
看看 pacman 的 cache 里有没有老版本的包
|
20
jhaohai 2017-04-14 13:10:47 +08:00
arch 两年动过居然没升死?
|
21
sujin190 2017-04-14 13:19:17 +08:00 1
日志中已经写了,要用 PostgreSQL 9.6 版本启动,应该是升级系统的时候自动升级了 PostgreSQL 了,你重新安装一个 9.6 版本就是了啊,源里没有的话,可以从官网下载,编译,然后在修改一下配置文件就好了
|
22
sujin190 2017-04-14 13:20:14 +08:00
@fl2d #17 你可以吧 /var/lib/postgres/data cp 成 /var/lib/postgres/8.4/data ,修正一下权限就行了
|
23
jy02201949 2017-04-14 13:44:25 +08:00 via iPhone
当初就是冲着大家说 arch 滚不死去的,然后。。。我换了 ubuntu
|
24
msg7086 2017-04-14 13:55:07 +08:00
@jy02201949 Ubuntu 连滚都滚不起来了 hhh
|
25
standin000 2017-04-14 14:00:14 +08:00
archlinux 滚不死是假象,一定要每次升级时遵循升级文档,一次都不能少。。。
|
26
fl2d OP @ho121
果然 cache 里有以前的安装包! 可是不知为啥, pacman -Rns postgresql 后,再用 psql -V 查看版本号,还能显示版本号,并且是最新的,很奇怪。。 用 pacman -U name 安装上从 cache 里找到的老版本后,还是无法启动服务。。 应该是原来的 postgresql 删除不彻底,或者版本变量错误造成的吧? |
27
wangxiyu191 2017-04-14 14:08:22 +08:00
arch 现在这么优秀了么。。两年滚一次系统都不挂了?
|
28
NonClockworkChen 2017-04-14 14:11:29 +08:00
@msg7086 大神能解释一下什么叫滚,是 Rolling Release,百度了一下,没这方面的介绍..
|
29
jarlyyn 2017-04-14 14:13:05 +08:00
系统服务上 docker 是一个好习惯。
|
30
AstroProfundis 2017-04-14 14:49:30 +08:00 1
讲道理楼主这个锅不应该是 Arch 的,最多也只能甩给 postgresql, 我个人是觉得搞大动作前不备份数据是楼主自己的锅...
首先备份 db 数据文件,卸载当前版本,用上面 cache 里面找到的旧包安装,尝试启动后 dump 如果装了旧版还是不能启动,你至少看到 cache 知道版本号了,找个一样或者尽可能接近的版本在别的机器上安装好,复制数据文件过去启动起来 dump, 完了回这边的最新版导入 以及两年不滚的 Arch 不做备份&&细读文档就直接开搞是真猛士,系统没挂已经很给面子了.... |
31
msg7086 2017-04-14 15:01:22 +08:00 5
@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 发布以后,可以用很多年,那么为其编写的程序也可以长期稳定工作,而不用担心系统更新了以后出现不兼容情况。 坏处就是,时空完全冻结在发布的那个年代了,不要想着用现代甚至未来的黑科技。 滚动更新则相反,传统软件很难开发,因为软件版本更迭太快。但是对于互联网行业来说,随时可以用上最新的技术就是其巨大的优势。 |
32
MFC 2017-04-14 15:11:09 +08:00
@sagaxu 这东西至今都不如 mysql 流行,看来是有道理的。如果数据库已经很大了,比如几十 G ,那导出导入还不得痛苦死。。。。就为软件升个级就这么折腾。。。。
|
33
NonClockworkChen 2017-04-14 15:11:10 +08:00
@msg7086 谢谢,解释的很详细,明白了.
|
35
kkk123 2017-04-14 16:33:46 +08:00
邮件服务器当初被安利装了 psql ,后来想升级发现好可怕。。。先用着不升了,同样入坑的还有 maria...,还是 mysql 妥妥的
|
36
fl2d OP @AstroProfundis
请问,在类似系统装老版本 postgresql 后,然后怎么导入老数据库啊? 直接复制到数据文件夹就行了? initdb 怎么正啊? 现在装了老版本,还是一样的提示, An old version of the database format was found 。。 T T |
37
pubby 2017-04-14 19:19:21 +08:00 via Android
@kkk123 mysql 也一样的,当初一个几年前老版本的 slave 库,升级到 5.7 也起不来,需要安装几个中间版本一步步升级数据库
|
38
AstroProfundis 2017-04-14 19:39:35 +08:00
@fl2d 正常情况应该是直接复制过去启动就行了,还提示版本旧的话.......也许你两年前升级了数据库但没有重启过所以内存里面跑着的一直是更旧的版本?(纯猜测了,但换成我的话这个时候就再找更老的版本一点点往回试...当然备份一定得做好放到安全的地方)
|
39
DesignerSkyline 2017-04-14 19:55:59 +08:00 via Android
@msg7086 蕾姆酱讲得很清楚了!赞一个
|