温馨提示×

ubuntu lamp为何连不上库

小樊
43
2026-10-21 13:06:13
栏目: 智能运维

在 Ubuntu 上搭建 LAMP(Linux + Apache + MySQL/MariaDB + PHP) 后“连不上数据库”,常见原因和排查思路如下:


一、先确认“连不上”的表现

不同现象对应不同原因:

  • 网页报错:Connection refused / Access denied for user
  • 命令行也连不上
  • 只有 PHP 连不上,命令行能连
  • 本地能连,远程连不上

二、最常见原因与解决办法

1️⃣ MySQL/MariaDB 服务没启动

systemctl status mysql
# 或
systemctl status mariadb

启动:

sudo systemctl start mysql
sudo systemctl enable mysql

2️⃣ 数据库监听地址不对(只允许本地 socket)

查看监听:

netstat -tulnp | grep 3306

如果看到:

127.0.0.1:3306

说明 只监听本地

✅ 本地 PHP 用 localhost 或 127.0.0.1 一般没问题
❌ 远程或 Docker 容器连就会失败

修改配置(如需要远程):

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

改为:

bind-address = 0.0.0.0

重启:

sudo systemctl restart mysql

3️⃣ 用户权限问题(Access denied)

MySQL 用户是 用户+主机 绑定的

查看:

SELECT user, host FROM mysql.user;

如果用户是:

user@localhost

那你用 user@192.168.x.x 连接会失败

授权示例:

GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

4️⃣ PHP 没装数据库扩展

Ubuntu + PHP 常见坑

检查:

php -m | grep -i mysql

没有就装:

sudo apt install php-mysql
sudo systemctl restart apache2

5️⃣ 防火墙拦了 3306

sudo ufw status

放行:

sudo ufw allow 3306

6️⃣ Apache/PHP 连的是 socket 而非 TCP

PHP 配置中:

mysqli.default_socket =

确认路径和 MySQL socket 一致:

mysqladmin variables | grep socket

三、快速自检清单 ✅

  • [ ] MySQL 已启动
  • [ ] 用户有权限
  • [ ] bind-address 正确
  • [ ] PHP 扩展已装
  • [ ] 防火墙未拦截
  • [ ] 连接参数(host/user/pass/db)正确

四、如果你愿意

你可以直接贴出:

  • 报错信息(完整)
  • 连接代码(PHP / 命令行)
  • Ubuntu + MySQL 版本

我可以帮你精确定位是哪一种原因。

0 踩