PostgreSQL 启动失败

本文档记录了PostgreSQL数据库启动时遇到的问题,包括启动失败、权限被拒绝等。通过检查日志和执行相关命令,如修改目录权限,解决了.lock文件无法创建的问题。但后续仍出现权限问题,需要以postgres用户身份运行才能成功启动服务器,并监听5432端口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

# systemctl status rh-postgresql10-postgresql.service
● rh-postgresql10-postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/rh-postgresql10-postgresql.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2021-11-23 09:06:37 CST; 9min ago
  Process: 6025 ExecStart=/opt/rh/rh-postgresql10/root/usr/bin/postmaster -D ${PGDATA} (code=exited, status=1/FAILURE)
  Process: 6022 ExecStartPre=/opt/rh/rh-postgresql10/root/usr/libexec/postgresql-check-db-dir %N (code=exited, status=0/SUCCESS)
 Main PID: 6025 (code=exited, status=1/FAILURE)

Nov 23 09:06:37 systemd[1]: Starting PostgreSQL database server...
Nov 23 09:06:37 systemd[1]: rh-postgresql10-postgresql.service: main p...RE
Nov 23 09:06:37 systemd[1]: Failed to start PostgreSQL database server.
Nov 23 09:06:37 systemd[1]: Unit rh-postgresql10-postgresql.service en...e.
Nov 23 09:06:37 systemd[1]: rh-postgresql10-postgresql.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

在/var/lib/pgsql(数据库初始化目录)目录中initdb_rh-postgresql10-postgresql.log文件找到:

 You can now start the database server using:

    /opt/rh/rh-postgresql10/root/usr/bin/pg_ctl -D /var/opt/rh/rh-postgresql10/lib/pgsql/data -l logfile start

如果用root 用户执行则:

#  /opt/rh/rh-postgresql10/root/usr/bin/pg_ctl -D /var/opt/rh/rh-postgresql10/lib/pgsql/data -l logfile start
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will
own the server process.

su postgres 用户执行则:

waiting for server to start.... stopped waiting
pg_ctl: could not start server
Examine the log output.

查看日志文件:
/var/lib/pgsql/logfile

2021-11-23 09:21:07.689 CST [8183] LOG:  database system is shut down
2021-11-23 09:40:44.187 CST [11000] LOG:  listening on IPv6 address "::1", port 5432
2021-11-23 09:40:44.187 CST [11000] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2021-11-23 09:40:44.231 CST [11000] FATAL:  could not open lock file "/var/run/postgresql/.s.PGSQL.5432.lock": Permission denied
2021-11-23 09:40:44.231 CST [11000] LOG:  database system is shut down

方法:

chown -R postgres:postgres /var/run/postgresql
chmod 755 /var/run/postgresql
2021-11-23 10:58:48.016 CST [22255] FATAL:  could not create lock file "/tmp/.s.PGSQL.5432.lock": Permission denied

方法:

chown -R postgres:postgres /tmp //root用户

bash-4.2$ /opt/rh/rh- postgresql10/root/usr/bin/pg_ctl -D /var/opt/rh/rh-postgresql10/lib/pgsql/data -l logfile start  //postgres用户
waiting for server to start.... done
server started
[root@postgresql]# netstat -tpnl |grep 5432  
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      22852/postgres      
tcp6       0      0 ::1:5432                :::*                    LISTEN      22852/postgres     

进入到 /var/opt/rh/rh-postgresql10/lib/pgsql/data/log 下的postgresql-Fri.log文件:

2021-11-23 09:18:54.499 CST [24943] LOG:  using stale statistics instead of current ones because stats collector is not responding
2021-11-23 09:18:54.499 CST [24943] WARNING:  could not open statistics file "pg_stat_tmp/global.stat": Permission denied
### PostgreSQL 服务启动失败的排查与解决 在安装 PostgreSQL 的过程中,如果遇到服务启动失败的问题,可能由多种原因引起。以下是一些常见的原因及其解决方案: #### 1. 端口冲突 PostgreSQL 默认使用 5432 端口。如果该端口已被其他服务占用,则可能导致服务无法启动。 ```bash sudo netstat -tuln | grep 5432 ``` 若发现端口被占用,可以修改 PostgreSQL 配置文件中的端口号: ```bash sudo nano /etc/postgresql/<version>/main/postgresql.conf ``` 找到 `port` 参数并更改其值为未使用的端口号,例如 5433[^1]。 #### 2. 数据目录权限问题 PostgreSQL 对数据目录有严格的权限要求。如果数据目录的权限设置不正确,可能会导致服务启动失败。 ```bash sudo chown -R postgres:postgres /var/lib/postgresql/<version>/main sudo chmod -R 700 /var/lib/postgresql/<version>/main ``` 确保数据目录的所有者为 `postgres` 用户,并且权限设置为 700[^2]。 #### 3. 配置文件错误 PostgreSQL 的配置文件中可能存在语法错误或不兼容的参数设置。检查以下文件是否存在错误: - `/etc/postgresql/<version>/main/postgresql.conf` - `/etc/postgresql/<version>/main/pg_hba.conf` 可以通过以下命令验证配置文件是否正确: ```bash sudo pg_ctlcluster <version> main start --debug ``` 此命令会输出详细的调试信息,帮助定位配置问题[^3]。 #### 4. 日志分析 PostgreSQL 的日志文件通常位于 `/var/log/postgresql/` 目录下。检查日志文件以获取更多关于启动失败的详细信息: ```bash sudo tail -f /var/log/postgresql/postgresql-<version>-main.log ``` 根据日志中的错误信息采取相应的措施。例如,如果日志显示内存不足,可以尝试调整系统资源分配或优化配置文件中的内存参数[^1]。 #### 5. 初始化问题 如果 PostgreSQL 数据目录未正确初始化,也可能导致服务启动失败。可以尝试重新初始化数据目录: ```bash sudo pg_dropcluster <version> main --stop sudo pg_createcluster <version> main --start ``` 注意:此操作会删除所有现有数据,请确保已备份重要数据。 #### 6. 系统依赖问题 某些情况下,PostgreSQL 可能因缺少必要的系统依赖而无法启动。可以通过以下命令检查并安装缺失的依赖项: ```bash sudo apt-get update sudo apt-get install -f ``` --- ### 示例代码:检查 PostgreSQL 服务状态 ```bash # 检查服务状态 systemctl status postgresql # 尝试重新启动服务 systemctl restart postgresql # 如果服务仍然无法启动,强制停止并重新初始化 systemctl stop postgresql pg_dropcluster <version> main --stop pg_createcluster <version> main --start ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值