今天配置了一台服务器,网站不能打开,排查原因是数据库连接失败。数据库的地址是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