gpt4 book ai didi

postgresql - 我如何修复 Postgres 以便它在突然关闭后启动?

转载 作者:行者123 更新时间:2023-11-29 11:10:41 27 4
gpt4 key购买 nike

由于突然断电,运行在我本地机器上的 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 文件。这种行为的原因可能是什么,当然出路是什么?

最佳答案

你需要 pg_resetxlog .不过,在此之后您的数据库可能处于不一致状态,因此请使用 pg_dumpall 转储它,重新创建并导入回来。

造成这种情况的原因可能是:

  • 您还没有关闭硬件在磁盘上写入缓存,这通常防止操作系统在报告成功写入应用程序之前确保数据已写入。检查

    hdparm -I/dev/sda

    如果它在“写入缓存”之前显示“*”,则可能是这种情况。 Source of PostgreSQL有一个程序src/tools/fsync/test_fsync.c,测试数据与磁盘同步的速度。运行它 - 如果它报告的所有时间都比你的磁盘对操作系统说谎的时间短 3 秒 - 在 7500rpm 磁盘上,对同一位置进行 1000 次写入的测试至少需要 8 秒才能完成 (1000/(7500rpm/60s)) 因为它每条路线只能写一次。如果您的数据库位于/var/tmp 分区之外的另一个磁盘上,则需要编辑此 test_fsync.c - 更改

    #define FSYNC_FILENAME "/var/tmp/test_fsync.out"

    #define FSYNC_FILENAME "/usr/local/pgsql/data/test_fsync.out"

  • 您的磁盘出现故障并且有坏 block ,请检查 badblocks .

  • 您的 RAM 有问题,请查看 memtest86+至少 8 小时。

关于postgresql - 我如何修复 Postgres 以便它在突然关闭后启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/598200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com