[PHP]关于连接MySQL的问题

概述

PHP中无论使用MySQL函数抑或PDO连接MySQL服务器,都允许有两种方式,一是通过TCP网络层,一是通过unix socket

PHP并没有给出指明用何种方式去连接数据库,决定使用何种方式去连接数据库的是,连接时host的指定:

1、当host为一个ip值时,PHP使用TCP网络层方式去连接数据库;

2、当host的值为localhost时,PHP使用unix socket的方式连接数据库;

问题

当使用unix socket的方式连接数据库时,你必须确保本地的MySQL服务启用了unix socket这个连接方式;

一般来说MySQL服务会在/var/lib/mysql目录下建立一个mysql.sock,以确保PHP通过打开此文件连接MySQL服务;

试图打开和读取mysql.sock的程序必须具备对mysql.sock的rw权限;

并且php.ini在以下配置项,必须明确指明该文件的位置:

mysql.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket= /tmp/mysql.sock
mysqli.default_socket =/tmp/mysql.sock
//使用mysqld引擎的数据库应修改为如下设置
mysql.default_socket = /tmp/mysqld.sock
pdo_mysql.default_socket= /tmp/mysqld.sock
mysqli.default_socket =/tmp/mysqld.sock

假如没有正确配置php.ini的mysql[d].sock路径,连接数据库时,PHP的MySQL函数会抛出以下错误:

SQLSTATE[HY000] [2002] No such file or directory

在MySQL查看unix socket状态

可以通过以下命令查看unix socket状态:

mysql>show variables like '%sock%';
+-----------------------------------------+---------------------------+

| Variable_name                           | Value                     |

+-----------------------------------------+---------------------------+

| performance_schema_max_socket_classes   | 10                        |

| performance_schema_max_socket_instances | -1                        |

| socket                                  | /var/mysql/mysql.sock |

+-----------------------------------------+---------------------------+

3 rows in set (0.00 sec)

如果不socket的位置和你实际位置不一样。可以使用ln命令进行链接一下

ln -s /tmp/mysql.sock /var/mysql/mysql.sock

 

你可能感兴趣的:([PHP]关于连接MySQL的问题)