php mysql 连接不上_php连接不上MySQL问题解决办法_PHP教程
php連接不上mysql的原因有很多種常用的可能是函數(shù)沒(méi)開啟或mysql數(shù)據(jù)庫(kù)配置有問(wèn)題,下面我來(lái)給大家介紹php連接不上MySQL一些問(wèn)題的分析與解決方法。
現(xiàn)象1
在PHP error log里發(fā)現(xiàn):
PHP Warning: mysqli::mysqli(): (HY000/2003): Can’t connect to MySQL server on ‘XXX.XXX.XXX.XXX’ (99) in /u1/www/XXXX.php on line 10
PHP Warning: mysqli::close(): Couldn’t fetch mysqli in /u1/www/XXXX.php on line 11推斷:只有在高并發(fā)的環(huán)境下出現(xiàn)
診斷分析:
通過(guò)MySQL數(shù)據(jù)庫(kù)上抓包,沒(méi)發(fā)現(xiàn)異常。又把目標(biāo)轉(zhuǎn)到php 服務(wù)器上。
BTW:
linux開著selinux連接MySQL在測(cè)試中基本上屬于1ms+,禁掉selinux后在0.96左右。selinux還是要禁掉的。
既然又懷疑是PHP的問(wèn)題就寫一個(gè)程序測(cè)試(禁掉selinux后):
cat tconn.php
代碼如下
復(fù)制代碼
function microtime_float()
{
list($usec, $sec) = explode(” “, microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
for ( $i=0; $i<30000; $i++){=""
$dbh=new mysqli(“XXX.XXX.XXX.XXX”, “wubx”, “wubxwubx”, “userdb”, 3308);
$dbh->close();
}
$time_end= microtime_float();
$time_use= ($time_end – $time_start)/30000;
print “$time_usen”;
#php tconn.php
0.00090954260031382
再次運(yùn)行就開始大量的報(bào)錯(cuò)。
PHP Warning: mysqli::mysqli(): (HY000/2003): Can’t connect to MySQL server on ‘XXX.XXX.XXX.XXX’ (99) in /u1/www/XXXX.php on line 10
PHP Warning: mysqli::close(): Couldn’t fetch mysqli in /u1/www/XXXX.php on line 11
中止該程序后,通過(guò)
#strace php tconn.php 運(yùn)行
得到:
connect(3, {sa_family=AF_INET, sin_port=htons(3308), sin_addr=inet_addr(“XXX.XXX.XXX.XXX”)}, 16) = -1 EADDRNOTAVAIL (Cannot assign requested address)
shutdown(3, 2 /* send and receive */) = -1 ENOTCONN (Transport endpoint is not connected)
看到這個(gè)大概明白是本地的網(wǎng)絡(luò)可能注冊(cè)不上了,也難怪在MySQL抓包看也正常。
看樣子是本地tcp不能重用造成的。改一下在測(cè)試
代碼如下
復(fù)制代碼
sysctl -w net.ipv4.tcp_tw_reuse=1;
在次測(cè)試問(wèn)題不存在了。在這個(gè)上面碰了一下后順便改一下/etc/sysctl.conf添加:
代碼如下
復(fù)制代碼
net.ipv4.tcp_max_syn_backlog = 819200
net.core.netdev_max_backlog = 400000
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=0
#sysctl -p
問(wèn)題解決
現(xiàn)象2
MYSQL.測(cè)試連接mysql 提示’Fatal error: Call to undefined function mysql_connect()”環(huán)境j是:windows xp sp2 en , apache2.2,mysql5.1rc.php5.28。
這個(gè)提示,會(huì)不會(huì)是php沒(méi)有加載到連接mysql的庫(kù)文件呢? 在啟動(dòng)apache server后.我試著刪除’php5ts.dll’和’libmysql.dll’.提示不能刪除.說(shuō)明有程序在用著這兩個(gè)庫(kù)文件.說(shuō)明是有加載的.(當(dāng)然有許多方法來(lái)測(cè)試.比如可以用一些軟件,查看程序服務(wù)加載的所有庫(kù)文件.也是可以然而ap也說(shuō)指是php.ini設(shè)置有問(wèn)題.那我就不看別的.我就重點(diǎn)針對(duì)php.ini配置.
在沒(méi)有迷信php.ini是正確下.終于發(fā)現(xiàn).php.ini中漏了這一行.
PHPIniDir “你的php目錄”
#(例如: PHPIniDir “c:/php”)
重啟apache server,然后.用網(wǎng)上常用的方法
以下為引用的內(nèi)容:
代碼如下
復(fù)制代碼
$link=mysql_connect(‘localhost’,’用戶名’,’password’);
if(!$link) echo “失敗!”;
else echo “成功!”;
mysql_close();
?>
測(cè)試一下.就可以了
總結(jié)一下這些問(wèn)題
1. 首先要排查網(wǎng)絡(luò)問(wèn)題和防火墻的問(wèn)題
這個(gè)是必須的, 你要是連MySQL的服務(wù)器都連不上, 那還訪問(wèn)什么? 怎么檢查呢? ping一下 ping 192.168.0.11 ping 的通的話, 再去檢查一下 3306端口是不是被防火墻給擋掉了 ping 192.168.0.11:3306 或者干脆把防火墻關(guān)掉,service iptables stop (Redhat ) 或 ufw disable(ubuntu) 這一步?jīng)]問(wèn)題的話, 開始下一步:
2. 要排查有沒(méi)有訪問(wèn)權(quán)限
說(shuō)到訪問(wèn)權(quán)限, MySQL分配用戶的時(shí)候會(huì)指定一個(gè)host, 比如我的 host 指定為 192.168.0.5 , 那么這個(gè)賬號(hào)就只能 .5 這一臺(tái)機(jī)器訪問(wèn), 其他的機(jī)器用這個(gè)賬號(hào)訪問(wèn)會(huì)提示沒(méi)有權(quán)限。 host 指定為 % 則表示允許所有的機(jī)器訪問(wèn)。 一般來(lái)說(shuō)出于安全方面的考慮,遵循最小權(quán)限原則, 權(quán)限的問(wèn)題就不多講了, 不會(huì)的自己查手冊(cè)。 確定了權(quán)限沒(méi)問(wèn)題的話進(jìn)行下一步:
3. 要排查MySQL的配置
檢查mysql的配置文件, Linux下MySQL的配置文件叫 my.cnf windows下的叫 my.ini,檢查這個(gè)配置項(xiàng): –bind-address=IP
引用手冊(cè)里的一段話:
The IP address to bind to. Only one address can be selected. If this option is specified multiple times, the last address given is used. If no address or 0.0.0.0 is specified, the server listens on all interfaces.
綁定的IP, 只能綁定一個(gè)IP, 如果綁定多個(gè)IP, 則以最后一個(gè)綁定的為準(zhǔn)。 如果沒(méi)有綁定或綁定 0.0.0.0, 服務(wù)器監(jiān)聽所有的客戶端。
我曾經(jīng)就被這個(gè)東西害慘過(guò), 有一次搞了一個(gè)下午沒(méi)搞定, 檢查網(wǎng)絡(luò)通的, 檢查權(quán)限沒(méi)問(wèn)題, 客戶端就是死活連不上, 一看手冊(cè)明白了。 所以有什么問(wèn)題還是要多看手冊(cè)
www.bkjia.comtrueTechArticlephp連接不上mysql的原因有很多種常用的可能是函數(shù)沒(méi)開啟或mysql數(shù)據(jù)庫(kù)配置有問(wèn)題,下面我來(lái)給大家介紹php連接不上MySQL一些問(wèn)題的分析與解…
總結(jié)
以上是生活随笔為你收集整理的php mysql 连接不上_php连接不上MySQL问题解决办法_PHP教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 八个角最多可以把平面分成多少部分?_平面
- 下一篇: git fetch 与 git pull