由于突然停电,运行在本地机器上的Postgres服务器突然关闭。重新启动后,我尝试重新启动Postgres,并得到以下错误:
$ pg_ctl -D /usr/local/pgsql/data restart
pg_ctl: PID file "/usr/local/pgsql/data/postmaster.pid" does not exist
Is server running?
starting server anyway
server starting
$:/usr/local/pgsql/data$ LOG: database system shutdown was interrupted at 2009-02-28 21:06:16
LOG: checkpoint record is at 2/8FD6F8D0
LOG: redo record is at 2/8FD6F8D0; undo record is at 0/0; shutdown FALSE
LOG: next transaction ID: 0/1888104; next OID: 1711752
LOG: next MultiXactId: 2; next MultiXactOffset: 3
LOG: database system was not properly shut down; automatic recovery in progress
LOG: redo starts at 2/8FD6F918
LOG: record with zero length at 2/8FFD94A8
LOG: redo done at 2/8FFD9480
LOG: could not fsync segment 0 of relation 1663/1707047/1707304: No such file or directory
FATAL: storage sync failed on magnetic disk: No such file or directory
LOG: startup process (PID 5465) exited with exit code 1
LOG: aborting startup due to startup process failure数据目录中没有postmaster.pid文件。这种行为的原因可能是什么?当然,出路是什么?
发布于 2009-03-02 10:58:05
你需要重置日志。不过,您的数据库在这之后可能处于不一致的状态,所以使用pg_dumpall转储它,重新创建并导入回。
这样做的一个原因可能是:
hdparm -I /dev/sda
如果它在“写缓存”之前显示"*“,那么情况可能是这样的。PostgreSQL的来源有一个程序src/tools/fsync/test_fsync.c,它测试磁盘同步数据的速度。在7500 Run磁盘上运行它--如果它向操作系统报告的时间比磁盘欺骗的时间短3秒--在7500 Run磁盘上完成1000次写入同一位置的测试至少需要8秒(1000/(7500 Run/60)),因为每条路径只能写一次。如果数据库位于另一个磁盘上,而不是/var/tmp分区更改,则需要编辑此test_fsync.c。
#define FSYNC_FILENAME "/var/tmp/test_fsync.out"
至
#define FSYNC_FILENAME "/usr/local/pgsql/data/test_fsync.out"发布于 2009-02-28 17:57:00
在PostgreSQL邮件列表的档案中读取几条类似的消息(“磁盘上的存储同步失败:没有这样的文件或目录”)似乎表明存在非常严重的硬件故障,比简单的电源故障更糟糕。您可能需要为从备份中恢复做好准备。
发布于 2018-04-30 20:31:56
我的行为也有数据库腐败
docker run -it --rm -v /path/to/db:/var/lib/postgresql/data postgres:10.3 bash
su - postgres
/usr/lib/postgresql/10/bin/pg_resetwal -D /var/lib/postgresql/data -fhttps://stackoverflow.com/questions/598200
复制相似问题