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