首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复Postgres,使其在突然关闭后启动?

如何修复Postgres,使其在突然关闭后启动?
EN

Stack Overflow用户
提问于 2009-02-28 15:53:05
回答 7查看 74.4K关注 0票数 22

由于突然停电,运行在本地机器上的Postgres服务器突然关闭。重新启动后,我尝试重新启动Postgres,并得到以下错误:

$ pg_ctl -D /usr/local/pgsql/data restart

代码语言:javascript
复制
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文件。这种行为的原因可能是什么?当然,出路是什么?

EN

回答 7

Stack Overflow用户

发布于 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"
  • 您的磁盘正在故障,并有一个坏的块,请与坏块检查。
  • 你有一个坏内存,与memtest86+检查至少8小时。
票数 28
EN

Stack Overflow用户

发布于 2009-02-28 17:57:00

在PostgreSQL邮件列表的档案中读取几条类似的消息(“磁盘上的存储同步失败:没有这样的文件或目录”)似乎表明存在非常严重的硬件故障,比简单的电源故障更糟糕。您可能需要为从备份中恢复做好准备。

票数 6
EN

Stack Overflow用户

发布于 2018-04-30 20:31:56

我的行为也有数据库腐败

代码语言:javascript
复制
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 -f
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/598200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档