2016-08-01 174 views
0

的CentOS 6.7 的PostgreSQL 9.5.3参考WAL包含无效页面

我已经是上主备份复制数据库服务器。

突然,备用服务器的postgresql进程停止在该日志中。

2016-07-14 18:14:19.544 JST [][5783e03b.3cdb][0][15579]WARNING: page 1671400 of relation base/16400/559613 is uninitialized 
2016-07-14 18:14:19.544 JST [][5783e03b.3cdb][0][15579]CONTEXT: xlog redo Heap2/VISIBLE: cutoff xid 1902107520 
2016-07-14 18:14:19.544 JST [][5783e03b.3cdb][0][15579]PANIC: WAL contains references to invalid pages 
2016-07-14 18:14:19.544 JST [][5783e03b.3cdb][0][15579]CONTEXT: xlog redo Heap2/VISIBLE: cutoff xid 1902107520 
2016-07-14 18:14:21.026 JST [][5783e038.3cd9][0][15577]LOG: startup process (PID 15579) was terminated by signal 6: Aborted 
2016-07-14 18:14:21.026 JST [][5783e038.3cd9][0][15577]LOG: terminating any other active server processes 

而且,主服务器的postgresql日志没什么特别的。

但是,主服务器的/ var/log/messages如下所示。

Jul 14 05:38:44 host kernel: sbridge: HANDLING MCE MEMORY ERROR 
Jul 14 05:38:44 host kernel: CPU 8: Machine Check Exception: 0 Bank 9: 8c000040000800c0 
Jul 14 05:38:44 host kernel: TSC 0 ADDR 1f7dad7000 MISC 90004000400008c PROCESSOR 0:306e4 TIME 1468442324 SOCKET 1 APIC 20 
Jul 14 05:38:44 host kernel: EDAC MC1: CE row 1, channel 0, label "CPU_SrcID#1_Channel#0_DIMM#1": 1 Unknown error(s): memory scrubbing on FATAL area : cpu=8 Err=0008:00c0 (ch=0), addr = 0x1f7dad7000 => socket=1, Channel=0(mask=1), rank=4 
Jul 14 05:38:44 host kernel: 
Jul 14 18:30:40 host kernel: sbridge: HANDLING MCE MEMORY ERROR 
Jul 14 18:30:40 host kernel: CPU 8: Machine Check Exception: 0 Bank 9: 8c000040000800c0 
Jul 14 18:30:40 host kernel: TSC 0 ADDR 1f7dad7000 MISC 90004000400008c PROCESSOR 0:306e4 TIME 1468488640 SOCKET 1 APIC 20 
Jul 14 18:30:41 host kernel: EDAC MC1: CE row 1, channel 0, label "CPU_SrcID#1_Channel#0_DIMM#1": 1 Unknown error(s): memory scrubbing on FATAL area : cpu=8 Err=0008:00c0 (ch=0), addr = 0x1f7dad7000 => socket=1, Channel=0(mask=1), rank=4 
Jul 14 18:30:41 host kernel: 

内存错误在1周前开始。所以,我怀疑内存错误导致postgresql的错误。

我的问题是在这里。

1)内核可能导致内存错误导致postgresql的“WAL包含对无效页面的引用”错误?

2)为什么主服务器的postgresql没有任何日志?

thx。

回答

1

错误的内存可能会导致各种数据损坏,所以这对我来说似乎是一个足够好的解释。

也许在主PostgreSQL服务器上没有日志条目,因为所有损坏的都是WAL流。

您可以运行

oid2name 

找出哪个数据库具有OID 16400,然后

oid2name -d <database with OID 16400> -f 559613 

找出哪个表属于文件559613.

是佐餐大于12 GB?如果不是,那意味着页面1671400确实是一个无效值。

你没有告诉你正在使用哪个PostgreSQL版本,但是也许在更高版本中修复了复制错误,即使没有硬件错误也可能导致复制问题;阅读发行说明。

我会执行一个新的pg_basebackup并重新初始化从系统。

但我真的担心可能是主服务器上的数据损坏。块校验和很酷(如果pg_controldata <data directory> | grep checksum给出1,则开启),但可能不会检测到内存损坏的影响。

尝试像

pg_dumpall -f /dev/null 

在主,看看是否有错误。

保留您的旧备份以防您需要修理某些东西!

+0

谢谢您的回复。 我的postgresql的版本是9.5.3 – Jinil

+0

我不认为已经有一个已知的数据损坏错误,因为复制。 –