1. 程式人生 > >php連線mysql資料庫Can't connect to local MySQL server through socket /var/lib/mysql/mysql.sock

php連線mysql資料庫Can't connect to local MySQL server through socket /var/lib/mysql/mysql.sock

在部署一個阿里雲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“