温馨提示×

centos lamp为何连接不上mysql

小樊
60
2026-10-17 21:23:43
栏目: 云计算

在 CentOS + LAMP 环境下“连接不上 MySQL”是比较常见的问题,通常不是单一原因。下面按最常见原因 → 排查方法 → 解决方式来整理,你可以对照一步步检查。


一、MySQL 服务是否启动(最常见)

检查服务状态

systemctl status mysqld
# 或
systemctl status mariadb

如果没启动

systemctl start mysqld
systemctl enable mysqld

二、MySQL 监听地址问题(本地 / 远程)

查看监听端口

netstat -tunlp | grep 3306
# 或
ss -tunlp | grep 3306

常见问题:

  • 127.0.0.1:3306 → 只能本机连
  • 0.0.0.0:3306 → 可远程连

修改监听地址

编辑配置文件:

vi /etc/my.cnf
# 或
vi /etc/my.cnf.d/server.cnf

找到:

bind-address = 127.0.0.1

改为:

bind-address = 0.0.0.0

重启 MySQL:

systemctl restart mysqld

三、防火墙 / SELinux 拦截(非常常见)

1️⃣ 防火墙

firewall-cmd --list-all

允许 3306:

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

或临时关闭测试:

systemctl stop firewalld

2️⃣ SELinux

getenforce

临时关闭:

setenforce 0

长期关闭(不推荐生产):

vi /etc/selinux/config
SELINUX=disabled

四、MySQL 用户权限问题(PHP 连不上)

常见错误

  • Access denied for user 'root'@'localhost'
  • Unknown MySQL server host

查看用户权限

SELECT user, host FROM mysql.user;

授权远程或本地连接

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;

✅ 推荐:新建专用用户

CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL PRIVILEGES ON dbname.* TO 'webuser'@'localhost';

五、PHP 没装 MySQL 扩展(LAMP 常见)

PHP 连接 MySQL 需要的扩展

  • mysqli
  • 或 pdo_mysql

检查

php -m | grep -i mysql

安装(CentOS 7 示例)

yum install php-mysqlnd
systemctl restart httpd

六、PHP 连接代码问题

本地连接示例(✅ 正确)

$conn = new mysqli("127.0.0.1", "webuser", "pass", "dbname");

❌ 错误示例:

localhost  # 有时走 socket,容易出错

七、Socket 文件问题(本地连接)

查看 socket

mysql -e "SHOW VARIABLES LIKE 'socket';"

PHP 中可指定:

new mysqli("localhost", "user", "pass", "db", 3306, "/var/lib/mysql/mysql.sock");

八、快速自检清单 ✅

  • [ ] MySQL 已启动
  • [ ] 3306 端口可访问
  • [ ] 防火墙 / SELinux 未拦截
  • [ ] 用户有对应 host 权限
  • [ ] PHP 已安装 mysql 扩展
  • [ ] 连接地址正确(127.0.0.1 / socket)

如果你愿意,可以把具体报错信息(如 PHP 报错、MySQL 报错、是否本地/远程)发出来,我可以直接帮你精准定位。

0 踩