1. 干货码头首页
  2. 技术教程
  3. 排坑指南

记一次psql的错误

今天在导入一个巨大的10G的sql到psql中。

psql -f /w.sql -d mydb

结果导了半天,走不动了。然后想重启psql。也不行。记录此次遇到并解决的全流程。


启动报错日志:

HINT:  Future log output will appear in directory "/www/server/pgsql/logs".
< 2020-12-01 08:56:14.316 CST > FATAL:  lock file "postmaster.pid" already exists
< 2020-12-01 08:56:14.316 CST > HINT:  Is another postmaster (PID 12648) running in data directory "/www/server/pgsql/data"?

我很肯定的是我没有更改过任何psql的配置信息,既然pid进程启动不了。那就要想其他办法了。

由于是我导入大文件导致的,我再查看慢日志。

< 2020-12-01 09:24:19.652 CST > FATAL:  could not write block 16471 in file "pg_tblspc/189205/PG_9.6_201608131/191510/191524": Input/output error
< 2020-12-01 09:24:19.652 CST > CONTEXT:  writing block 16471 of relation pg_tblspc/189205/PG_9.6_201608131/191510/191524
	xlog redo at 1/4D541FB0 for Heap2/MULTI_INSERT+INIT: 70 tuples
< 2020-12-01 09:24:19.700 CST > LOG:  startup process (PID 7037) exited with exit code 1
< 2020-12-01 09:24:19.700 CST > LOG:  aborting startup due to startup process failure
< 2020-12-01 09:24:19.709 CST > LOG:  database system is shut down

结果发现,似乎是有一个巨大的文件占用。

开始排除大文件。

上宝塔面板查看下情况。发现文件系统的占用率已经满了。整整28G。

我本地环境是vagrant+centos。我尝试查看大文件所在位置。

du -ah --max-depth=2

从根目录开始检索,我一步步定位到了psql的data目录。发现此目录占用了17G。。

最终定位具体目录为:pg_xlog。

pg_xlog目录的用途:包含 WAL(预写日志)文件的子目录。

该文件是不能直接被删除的。否则数据库访问会出现难以预料的错误!

清理pg_xlog

首先要确认psql的安装位置。以及psql的数据文件存放位置。

关闭psql服务。

/www/server/pgsql/bin/pg_ctl stop -D /www/server/pgsql/data

查询到psql相关的

/www/server/pgsql/bin/pg_controldata -D /www/server/pgsql/data

记一次psql的错误

重置pg_xlog

/www/server/pgsql/bin/pg_resetxlog -o 197396 -x 101463 -f /www/server/pgsql/data

然后重启psql即可。过程中,如果出现需要用户权限是postgres的话,就切换用户postgres:

su postgres

 

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以自助投稿,分享给更多爱好者!
4. 本站提供的源码、模板、插件等等其他资源,可付费支持搭建测试!
5. 本站也提供全网源码付费代下,如有需求请联系店长!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7.源码秉承发布最快最新资源,特殊原创会标明如有侵犯版权等可提交工单告知!
8.如有链接无法下载、失效或广告,请联系管理员处理!
9.站长email: ganhuomatou@qq.com

发表评论

电子邮件地址不会被公开。