MySQL的两种连接方式:localhost与127.0.0.1

现象

内网新安装了LNMP,一个程序需要用到MySQL,连接参数中hosts写的是localhost,但是发现访问页面会报错:

1405 Access denied for user ‘xxxxx@127.0.0.1

这里有两个疑问:
1.为什么配置是localhost,但是这里报错却是127.0.0.1?
2.数据库中已经给账号添加了权限(localhost和127.0.0.1都有权限),为什么还是连不上?

分析

这里其实有三个原因:

localhost与127.0.0.1不是同一个内容

localhost是采用Unix socket连接,127.0.0.1是采用TCP/IP连接

PHP如果使用socket连接数据库,需要配置mysql.default_socket

php.ini中有三个配置项,具体看你用什么方式连接mysql,就配置哪个:pdo_mysql.default_socket, mysql.default_socket, mysqli.default_socket

PHP进程的缓存问题

如果使用了一些缓存技术,php-fpm进程会缓存代码,因此你修改了配置后,刷新页面可能不会立即生效,需要重启php-fpm