php 连接mysql 主机 localhost,显示 No such file or directory

Posted fsong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 连接mysql 主机 localhost,显示 No such file or directory相关的知识,希望对你有一定的参考价值。

打开 php.ini文件,找到这1行

mysql.default_socket

然后将它修改为

mysql.default_socket=/path/to/mysql.sock

/path/to/mysql.sock是mysql的配置文件/etc/my.cnf中的socket的路径

如我当前虚拟机中的mysql 配置文件/etc/my.cnfsocket = /tmp/mysql.sock,所以修改php.ini中找到的mysql.default_socket =都改为mysql.default_socket = /tmp/mysql.sock,然后重启 apache,使配置生效


系统:Ubuntu 16.04
环境: Apache 2.4 + PHP 5.6.40 + Mysql 5.5.31

php连接mysql demo代码:

$conn = mysql_connect('localhost','root','secret');

if(!$conn)
    die(mysql_error());


echo "success"; 

主机使用localhost,显示No such file or directory的错误。改为127.0.0.1之后可以连接成功。

前提: 我的mysql配置文件 /etc/my.cnf[mysqld]节点下的配置项 socket = /tmp/mysql.sock

终端命令(用来查看 php 信息中mysql.default_socket的配置情况):

php -i | grep mysql.default_socket

运行结果:

mysql.default_socket => no value => no value
pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

php.ini中mysql.default_socket的默认路径和当前运行mysql 配置文件中的socket的值/tmp/mysql.sock 不相等

我的LAMP环境中php.ini文件有2个,路径分别是:/etc/php/5.6/cli/php.ini/etc/php/5.6/apache2/php.ini

将上面2个php.ini文件中mysql.default_socket = 都修改成mysql.default_socket = /tmp/mysql.sock,然后重启apache2

终端命令:

sudo service apache2 stop # 停止apache
sudo service apache2 start # 启动apache

再次查看 mysql.default_socket的配置是否生效

终端命令:

php -i | grep mysql.default_socket

运行结果:

mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

配置成功,然后通过浏览器,访问带有上面 php连接mysql demo代码的文件,运行结果为success.

Reference
  1. MySQL connection not working: 2002 No such file or directory

以上是关于php 连接mysql 主机 localhost,显示 No such file or directory的主要内容,如果未能解决你的问题,请参考以下文章

求助PHP和MySQL测试连接错误

本地php 连接 MySQL

似乎无法连接到 mysql、localhost?

phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。您应该检查配置文件中的主机用户名和密码

如何在PHP中连接MySQL数据库

mysql设置允许其他主机连接