时间:2021-07-01 10:21:17 帮助过:6人阅读
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服务;
并且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的问题
标签:mysq 服务 错误 value directory row efault rman 本地