PostgreSQL故障排查指南CentOS版
CentOS 上 PostgreSQL 故障排查指南
一 快速定位流程
- 确认服务状态与单元名称:常见为 postgresql-<
版本>
(如 postgresql-12),执行:
sudo systemctl status postgresql-12;若提示未初始化,按提示执行:sudo postgresql-setup --initdb(或postgresql-setup initdb)。 - 查看日志:优先看服务日志与数据库日志。服务侧:
sudo journalctl -xe -u postgresql-12;数据库日志通常在 PGDATA/log/ 目录(若启用日志收集器),或发行版默认目录(如 /var/log/postgresql/)。 - 核对端口与套接字:端口检查
ss -lntp | grep 5432;套接字常见路径 /var/run/postgresql/.s.PGSQL.5432 或 /tmp/.s.PGSQL.5432。 - 直连数据库做内部诊断:
sudo -u postgres psql -c "SELECT version(); "、SELECT * FROM pg_stat_activity;。
二 常见故障与修复
-
服务起不来且提示数据目录缺失或未初始化:错误信息含 “/var/lib/pgsql/data is missing or empty”。修复:
sudo postgresql-setup --initdb,再sudo systemctl start postgresql-12。 -
端口被占用:日志或
ss -lntp | grep 5432显示 5432 被占用。处理:停掉占用进程或调整postgresql.conf的 port,随后systemctl restart postgresql-12。 -
本地连接被拒绝或认证失败:报错如 “Connection refused” 或 “no pg_hba.conf entry”。修复:在 postgresql.conf 将
listen_addresses设为'*'(或服务器IP);在 pg_hba.conf 为需要的来源添加规则,例如:host all all 0.0.0.0/0 md5(生产环境请限制网段并使用强认证)。 -
套接字或临时目录问题:报错涉及 “/var/run/postgresql/.s.PGSQL.5432” 或 “/tmp/.s.PGSQL.5432.lock”。处理:确认目录存在且属主为 postgres,必要时在
postgresql.conf设置unix_socket_directories指向有效目录(如/var/run/postgresql),并确保 /tmp 可写。 -
磁盘空间耗尽导致无法启动:典型错误 “could not write lock file … No space left on device”。处理:清理根分区(如
journalctl --vacuum-size=100M、yum clean all、rm -rf /tmp/* /var/tmp/*),或将 PGDATA 与 临时目录迁移到空闲磁盘并更新配置与 systemd 环境。
三 日志与配置要点
-
启用与集中日志:在 PGDATA/postgresql.conf 开启
logging_collector = on,并设置log_directory、log_filename、log_statement(如all或ddl)、log_min_duration_statement(单位毫秒)以记录慢查询与关键语句。 -
日志轮转与归档:结合 PostgreSQL 参数与系统 logrotate 控制单个文件大小与保留周期;长期保留可接入 ELK/Fluentd 或 pgBadger 做分析与报表。
-
常见关键配置:
listen_addresses(建议按需开放)、port(默认 5432)、unix_socket_directories(套接字目录)、max_connections、shared_buffers、work_mem、log_statement、log_min_duration_statement。修改后执行systemctl reload postgresql-12生效。
四 远程访问与 pgAdmin 排障
-
防火墙放行:在 CentOS 执行
sudo firewall-cmd --permanent --add-port=5432/tcp & & sudo firewall-cmd --reload。 -
服务端配置:在 postgresql.conf 设置
listen_addresses = '*'(或指定内网IP),在 pg_hba.conf 为客户端网段添加规则(如host all all 192.168.1.0/24 md5)。 -
SELinux:若启用 SELinux,数据目录迁移后执行
sudo restorecon -Rv /var/lib/pgsql修复上下文。 -
pgAdmin 自身:确认 pgAdmin 服务/容器运行,检查其日志(常见路径 /var/log/pgadmin4/pgadmin4.log),必要时重装或更新;Web 端可清缓存或更换浏览器测试。
五 维护与应急脚本
- 一键健康检查:
- 服务与端口:
systemctl is-active postgresql-12 & & ss -lntp | grep 5432 - 连接与会话:
sudo -u postgres psql -c "SELECT count(*) FROM pg_stat_activity; " - 近期错误:
grep -i error $PGDATA/log/*.log | tail -50
- 服务与端口:
- 安全重启:
systemctl reload postgresql-12(不中断会话的热加载)或systemctl restart postgresql-12(变更后需要)。 - 空间紧张应急:优先清理系统日志与缓存,必要时临时迁移 PGDATA 与 临时目录至大磁盘分区,并修正
postgresql.conf与 systemd 的 PGDATA 路径后启动。 - 变更前务必备份:逻辑备份
pg_dumpall -U postgres > backup.sql或按库pg_dump -U postgres db > db.sql。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: PostgreSQL故障排查指南CentOS版
本文地址: https://pptw.com/jishu/758905.html
