mysqli不能通过localhsot连接但可以通过127.0.0.1连接的原因分析

作者

今天配置了一台服务器,网站不能打开,排查原因是数据库连接失败。数据库的地址是losthost修改为127.0.0.1打开就正常的。这个原因是连接mysql数据库有两种方式。一:tcp/ip 方式, 二: socket 方式。

mysqli连接失败的具体表现

php程序中,修改数据库主机地址为 127.0.0.1就连接正常。php程序通过localhost不能连接数据库。使用mysql命令可以通过localhost连接,也可以通过127.0.0.1连接。

解决的办法

通过127.0.0.1连接是通过tcp/ip的方式。 通过localhost是socket方式。如果想通过localhost连接,就要查看php配置文件中socket的设置是否正确。

一:查看socket查看位置

### 一种方式
mysqld --verbose --help | grep ^socket
socket                                                       /var/lib/mysql/mysql.sock

### 二种方式 配置文件的位置可能不同
cat /etc/my.cnf.d/mysql-server.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid

二步: 查看php的配合文件,是否设置的正确

cat /etc/php/php.ini | grep -F "default_socket"


pdo_mysql.default_socket =
mysqli.default_socket =

这里看到有两个,如果是通过mysqli进行的连接。修改 mysqli.default_socket即可,这里修改为

pdo_mysql.default_socket=/var/lib/mysql/mysql.sock
mysqli.default_socket =  /var/lib/mysql/mysql.sock

pdo_mysql.default_socket 这个配置项不是必须修改的,当然如果使用pdo进行数据库连接,也要修改下。

三步: 重启php-fpm

killall php-fpm
php-fpm -c /etc/php/php.ini

回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注