windows下php通过mysqli连接mysql,用户名是root、hostname设置为localhost是没有问题的。但是切换到mac或linux环境,localhost无法连接,127.0.0.1连接正常。
主要原因是linux下如果hostname指定为localhost连接mysql,是通过unix socket,需要指定mysql.sock路径;hostname是127.0.0.1时,是通过tcp/ip(ipv4)协议。
这里所说的socket是指,socket是用于同一台主机的进程间通讯(IPC),不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另外一个进程,消息既不会丢失也不会顺序错乱。可用于两个没有亲缘关系的进程,是全双工的。
如果想用localhost连接:
首先要确保mysql数据库user表中有root localhost这一行记录;
其次需要在my.cnf中client项设置增加:
[client]
socket = mysql.sock完整路径
最后,需要在php.ini中设置mysqli.default_socket:
mysqli.default_socket = mysql.sock完整路径