pg无法启动

文章讲述了在尝试启动PostgreSQL9.6.24时遇到的问题,服务启动失败,原因是pg_hba.conf文件被注释导致。通过检查日志发现,系统无法加载配置文件,解决后重启成功并启动了数据库服务。

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

现象:

[root@pg ~]# systemctl status postgresql
● postgresql.service - PostgreSQL 9.6.24 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2023-11-08 11:15:14 CST; 13s ago
  Process: 26250 ExecStop=/usr/local/pgsql/bin/pg_ctl stop -m fast -w -D /usr/local/pgsql/pgdata (code=exited, status=0/SUCCESS)
  Process: 26267 ExecStart=/usr/local/pgsql/bin/pg_ctl start -w -D /usr/local/pgsql/pgdata -l /usr/local/pgsql/pgdata/pg_log/startup.log (code=exited, status=1/FAILURE)
 Main PID: 23576 (code=exited, status=0/SUCCESS)

Nov 08 11:15:13 pg systemd[1]: Starting PostgreSQL 9.6.24 database server...
Nov 08 11:15:14 pg systemd[1]: postgresql.service: control process exited, code=exited status=1
Nov 08 11:15:14 pg systemd[1]: Failed to start PostgreSQL 9.6.24 database server.
Nov 08 11:15:14 pg systemd[1]: Unit postgresql.service entered failed state.
Nov 08 11:15:14 pg systemd[1]: postgresql.service failed.

从上面的报错中,可以看到:
1、关闭正常,启动失败
2、启动日志存放在/usr/local/pgsql/pgdata/pg_log/startup.log文件中

检查启动日志

LOG:  redirecting log output to logging collector process
HINT:  Future log output will appear in directory "pg_log".

日志重定向到了配置的日志路径中,检查pg的参数文件,确定日志的文件名
[postgres@pg pgdata]$ cat postgresql.conf

#self define
listen_addresses = '*'
port = 5432
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d #这个mon文件保留多久才被允许覆盖,第2天产生的Tue了
log_rotation_size = 0

从这里看到,日志目录是pg_log,日志文件名是postgresql-%a.log,这里的%a是星期几的缩写,今天星期三,那么日志文件名就是postgresql-Wed.log

查看真正的数据库启动日志postgresql-Wed.log

LOG:  configuration file "/usr/local/pgsql/pgdata/pg_hba.conf" contains no entries
FATAL:  could not load pg_hba.conf
LOG:  database system is shut down

从这里可以看到,无法加载pg_hba.conf文件,原因是这个文件中的内容全部被注释,没有可运行的内容。这里面,至少存在一条

local   all             all                                     trust

再次启动,正常

LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started
### 安装和启动 PostgreSQL 数据库 #### 准备工作 为了在指定域名服务器上安装并启动 PostgreSQL 数据库,需先访问 PostGreSQL 官网获取源码文件[^3]。通过该网站提供的链接下载适用于目标操作系统的版本。 #### 编译与安装过程 对于基于 Linux 的系统如 Centos 7.9, 下载完成后解压源码包,并按照官方文档指导完成编译安装流程。这通常涉及设置环境变量、运行 `./configure` 脚本以及执行 `make && make install` 命令来构建软件[^4]。 #### 初始化数据库集群 一旦安装完毕,则需要初始化一个新的数据库实例。此步骤可通过调用 `initdb` 工具实现,它会创建必要的目录结构和服务端配置文件[^1]: ```bash initdb -D /path/to/data_directory ``` #### 修改服务配置 编辑位于数据目录下的 `postgresql.conf` 文件调整各项参数以适应具体应用场景的需求。例如最大连接数 (`max_connections`) 和共享缓冲区大小 (`shared_buffers`) 等资源管理选项均在此处定义。 #### 启动 PostgreSQL 服务 利用 `pg_ctl` 实用程序控制守护进程的状态,在生产环境中建议将其注册为操作系统级别的服务以便于管理和维护: ```bash pg_ctl start -D /path/to/data_directory ``` #### 设置远程访问权限 为了让其他客户端能够顺利连入新建立的服务节点,还需适当放宽防火墙策略允许外部 IP 地址发起请求;同时修改 `pg_hba.conf` 中的相关条目授予特定主机或子网相应的认证级别[^5]。 #### 测试连接功能 最后一步就是验证整个部署方案的有效性了。借助命令行工具 `psql`, 只要提供正确的主机名 (即所指派给当前机器的 FQDN)、监听端口、用户名及默认使用的数据库名称即可成功接入[^2]: ```bash psql -p 5432 -U user_name -d db_name ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值