重启Lubuntu测试虚拟机后PostgreSQL数据库连接失败问题求助
排查Lubuntu虚拟机重启后PostgreSQL连接失败的方案
遇到重启后数据库连不上的问题,咱们一步步来定位原因,先从最基础的环节检查:
1. 确认PostgreSQL服务是否正常运行
首先得确保数据库服务本身起来了,毕竟重启虚拟机后有些服务可能没设置开机自启:
- 执行命令查看服务状态:
如果输出里显示sudo systemctl status postgresqlactive (running),那服务没问题;要是显示inactive或者failed,先手动启动服务:
为了避免下次重启再出问题,记得设置开机自启:sudo systemctl start postgresqlsudo systemctl enable postgresql
2. 检查PostgreSQL的端口监听状态
PostgreSQL默认用5432端口,要是它只监听本地127.0.0.1,那外部的pgAdmin和Laravel API肯定连不上:
- 用
ss命令查看端口监听情况(比netstat更推荐):
或者如果习惯用netstat,先装工具再查:ss -tulpn | grep 5432
你要找的是sudo apt install net-tools netstat -tulpn | grep 5432postmaster进程是否在监听0.0.0.0(允许所有IP访问)或者你的虚拟机局域网IP,而不是只有127.0.0.1。
3. 调整PostgreSQL的连接配置
如果端口只监听本地,就得修改数据库的配置文件:
- 找到
pg_hba.conf(路径一般是/etc/postgresql/<你的PG版本>/main/pg_hba.conf,比如/etc/postgresql/14/main/pg_hba.conf),添加一行允许外部IP段访问的规则:
把host all all 192.168.1.0/24 scram-sha-256192.168.1.0/24换成你主机和虚拟机所在的局域网IP段。 - 然后编辑
postgresql.conf,找到listen_addresses项,改成:
改完后重启PostgreSQL服务生效:listen_addresses = '*'sudo systemctl restart postgresql
4. 检查Lubuntu的防火墙规则
重启后防火墙规则可能重置或者默认挡住了5432端口,Lubuntu默认用ufw防火墙:
- 先看防火墙是否开启:
如果显示sudo ufw statusactive,就添加5432端口的允许规则:
要是你用的是iptables,就检查入站规则:sudo ufw allow 5432 sudo ufw reload
没有允许5432的话就添加:sudo iptables -L -nsudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT sudo iptables-save > /etc/iptables/rules.v4
5. 测试端口连通性
做完上面的步骤,咱们验证一下端口是否真的通了:
- 虚拟机本地先测试数据库连接:
能连上说明数据库本身没问题。psql -U <你的数据库用户名> -d <数据库名> - 在主机上用nc或者telnet测试端口:
或者nc -zv <虚拟机IP> 5432
如果显示连接成功,那端口就通了;要是失败,回头检查防火墙和PG的监听配置。telnet <虚拟机IP> 5432
6. 确认Laravel API的配置
最后别忘了检查Laravel的.env文件,确保数据库连接参数正确:
- 确认
DB_HOST是虚拟机的IP,DB_PORT=5432,DB_USERNAME和DB_PASSWORD和数据库的一致,然后重启你的Laravel服务(比如重启php-fpm或者web服务器)。
内容的提问来源于stack exchange,提问作者Magas




