【发布时间】:2018-02-13 16:58:15
【问题描述】:
系统的 Postgres 损坏(原因是 RAID),没有任何备份。
尝试使用 Postgres 将数据放入另一台计算机(并进行备份)。
但是当我设置数据目录并运行 postgres 时,我总是收到消息
GET FATAL: database files are incompatible with server
2012-08-15 19:58:38 GET DETAIL: The database cluster was initialized with BLCKSZ 16777216, but the server was compiled with BLCKSZ 8192.
2012-08-15 19:58:38 GET HINT: It looks like you need to recompile or initdb.
这是非常奇怪的数字 16777216(2 到 24 次方 - 到大)。
但是编译时我无法重置默认值 8192(使用 --with-blocksize= 无效;BLCKSZ - 我在头文件中找不到它)
)。
有什么方法可以提取数据?
这是环境和情况:
硬盘:RAID 1,阵列中有 3 个 SAS 磁盘
操作系统:ubuntu 10.04.04 amd64
Postgres:9.1(通过 apt-get(我们将存储库链接更改为更高版本的 Ubuntu))
系统坏了 - 一段时间后
AAC:主机适配器闪烁 LED 0x56
AACO:适配器内核崩溃 56
(文件系统或硬件错误)
不知何故,我们得到了数据目录。 pg_conroldata 显示:
pg_control 版本号: 903
目录版本号: 201105231
数据库系统标识符: 5714530593695276911
数据库集群状态: 关闭
pg_control 最后修改时间: 2012 年 8 月 15 日星期二 11:50:50
最新检查站位置: 1B595668/2000020
前检查点位置: 0/0
最新检查点的 REDO 位置:1B595668/2000020
最新检查点的 TimeLineID: 1
最新检查点的 NextXID: 0/4057946
最新检查点的 NextOID: 40960
最新检查点的 NextMultiXactId:1
最新检查点的 NextMultiOffset: 0
最新检查点最旧的 XID: 670
最新检查点最旧 XID 的 DB:1344846103
最新检查点的最旧ActiveXID:0
最新检查点时间: 2012 年 8 月 15 日星期二 11:50:50
最小恢复结束位置: 0/0
备份开始位置: 0/0
当前的 wal_level 设置: 最小
当前 max_connections 设置:100
当前 max_prepared_xacts 设置:0
当前 max_locks_per_xact 设置:64
最大数据对齐: 8
数据库块大小: 16777216
大关系每段的块数:131072
WAL 块大小: 8192
每个 WAL 段的字节数: 16777216
标识符的最大长度: 64
索引中的最大列数: 2387576020
TOAST 块的最大大小:0
日期/时间类型存储: 浮点数
Float4 参数传递: 通过引用
Float8 参数传递: 通过引用
首先,我努力在 Ubuntu 服务器(硬盘 - 简单串行 2、Ubuntu 10.04 i386、Postgres 9.1)中升级 DB,并在上面遇到相同的异常(使用 BLCKSZ)。
这就是为什么我在虚拟机中部署带有英文 Postgres 9.1 的 Ubuntu 10.04 amd64(因为在上一步的错误日志中得到了 '?' 而不是俄罗斯符号) 遇到了同样的异常(使用 BLCKSZ)。
Ather 已删除 apt-get postgres 版本并按照文档http://www.postgresql.org/docs/9.1/static/installation.html 中的说明对其进行编译。
玩configure --with-blocksize=BLOCKSIZE 无效 - 得到同样的错误
抱歉,发帖了。
pg_contol 被一些操作破坏了。
Sow,pg_resetxlog 用初始数据成功恢复了集群。
【问题讨论】:
-
在这种情况下,“将数据放入另一台计算机”究竟是什么意思?
标签: postgresql