windows下php通過mysqli連接mysql,用戶名是root型凳、hostname設(shè)置為localhost是沒有問題的伪窖。但是切換到mac或linux環(huán)境嗦董,localhost無法連接,127.0.0.1連接正常峡眶。
主要原因是linux下如果hostname指定為localhost連接mysql剧防,是通過unix socket,需要指定mysql.sock路徑辫樱;hostname是127.0.0.1時峭拘,是通過tcp/ip(ipv4)協(xié)議。
這里所說的socket是指狮暑,socket是用于同一臺主機的進程間通訊(IPC)鸡挠,不需要經(jīng)過網(wǎng)絡協(xié)議棧,不需要打包拆包搬男、計算校驗和拣展、維護序號和應答等,只是將應用層數(shù)據(jù)從一個進程拷貝到另外一個進程缔逛,消息既不會丟失也不會順序錯亂备埃⌒栈螅可用于兩個沒有親緣關(guān)系的進程,是全雙工的按脚。
如果想用localhost連接:
首先要確保mysql數(shù)據(jù)庫user表中有root localhost這一行記錄于毙;
其次需要在my.cnf中client項設(shè)置增加:
[client]
socket = mysql.sock完整路徑
最后,需要在php.ini中設(shè)置mysqli.default_socket:
mysqli.default_socket = mysql.sock完整路徑