php连接mysql数据库Can't connect to local MySQL server through socket /var/lib/mysql/mysql.sock

时间:2023-02-10 18:55:50

在部署一个阿里云web环境 ,先是安装了阿里云提供的NMP环境。导致了程序的一些php脚本无法正常运行。于是有用yum安装了一个php。但是在运行脚本时。会报 Can't connect to local MySQL server through socket /var/lib/mysql/mysql.sock,原有的nmp中的mysql的sock 是位于/tmp/mysql.sock.而yum安装php所调用的mysql.sock 默认是位于//var/lib/mysql/mysql.sock.而实际上并不存在这个,而每次/etc/init.d/mysql restart .所产生的sock也只是产生在/tmp文件下,于是采取了以下措施:

   1修改/etc/my.cnf

         port = 3306
          #socket = /tmp/mysql.sock
         #socket = /var/lib/mysql/mysql.sock
         mysqld]
         port = 3306
        #socket = /tmp/mysql.sock
        socket = /var/lib/mysql/mysql.sock

但是还是没能在/var/lib/mysql产生mysql.sock 检查发现是/var/lib/mysql的属主是root.root于是改成mysql.mysql

重启msyql。运行脚本,脚本成功运行,表明php成功通过sock连接mysql。

但是很惨的是脚本可以运行了。但是web服务器却报了无法通过Can't connect to local MySQL server through socket /tmp/mysql.sock

赶紧把配置改回socket=/tmp/mysql.sock,果然,网站正常了,脚本又不能运行了。

然后看到了这篇文章:http://www.netingcn.com/mac-os-lion-php-mysql-localhost.html

原来是通过yum安装的php和nmp脚本安装的php的配置文件中关于msyql.sock的默认配置是不同的。

默认的php配置文件中mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket这三项值修改为“/tmp/mysql.sock,(ps:我的centos中的php是没有pdo_mysql.default_socket这个配置项的;修改好后再次运行脚本。脚本成功运行,网站也成功运行。


说明了,在一台服务器上通过不同的方式安装php,默认配置是不同的。有一些配置项是默认值为空,但是不同的php中的实际值是不同的,需要明确修改配置:如mysql.default_socket = 改为 mysql.default_socket = ”tmp/mysql.sock“