ホームページ > バックエンド開発 > PHPチュートリアル > PHPがMySQLに接続できない問題の解決方法_PHPチュートリアル

PHPがMySQLに接続できない問題の解決方法_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:46:53
オリジナル
1374 人が閲覧しました

php连接不上mysql的原因有很多种常用的可能是函数没开启或mysql数据库配置有问题,下面我来给大家介绍php连接不上MySQL一些问题的分析与解决方法。

现象1

在PHP error log里发现:
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
推断:只有在高并发的环境下出现

诊断分析:

通过MySQL数据库上抓包,没发现异常。又把目标转到php 服务器上。

BTW:
linux开着selinux连接MySQL在测试中基本上属于1ms+,禁掉selinux后在0.96左右。selinux还是要禁掉的。
既然又怀疑是PHP的问题就写一个程序测试(禁掉selinux后):
cat tconn.php

 代码如下 复制代码

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

再次运行就开始大量的报错。

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
中止该程序后,通过

#strace php tconn.php 运行

得到:

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)
看到这个大概明白是本地的网络可能注册不上了,也难怪在MySQL抓包看也正常。

看样子是本地tcp不能重用造成的。改一下在测试

 代码如下 复制代码
sysctl -w net.ipv4.tcp_tw_reuse=1;

在次测试问题不存在了。在这个上面碰了一下后顺便改一下/etc/sysctl.conf添加:

 代码如下 复制代码

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

問題解決

現象2

MYSQL。mysql への接続をテストすると、「致命的なエラー: 未定義の関数 mysql_connect() への呼び出し」が表示されます。環境 j は、Windows XP SP2 en、apache2.2、mysql5.1rc.php5.28 です。 このプロンプトは、mysql に接続されているライブラリ ファイルに php がロードされていない可能性がありますか? Apache サーバーを起動した後、「php5ts.dll」と「libmysql.dll」を削除しようとしましたが、プロンプトが削除できないことを示しています。これら 2 つのライブラリ ファイルは、使用中のプログラムがロードされていることを示します (もちろん、テストにはさまざまな方法があります。たとえば、プログラム サービスによってロードされたすべてのライブラリ ファイルを表示するソフトウェアを使用できます)。ただし、AP は php.ini の設定に問題があるとも言いました。それでは、php.ini の設定には焦点を当てません。

php.ini が正しいという迷信はなく、最終的にこの行が .php.ini に欠落していることを発見しました

PHPINiDir「あなたのphpディレクトリ」

#(例: PHPIniDir "c:/php")

Apache サーバーを再起動し、インターネットで一般的に使用される方法を使用します

以下、引用内容です


コードは次のとおりですコードをコピー $link=mysql_connect('localhost','ユーザー名','パスワード'); if(!$link) echo "失敗しました!"; それだけです
それ以外の場合は「成功!」をエコーし​​ます;
mysql_close();
?>



これらの質問を要約します


查1 まず、ネットワークの問題とファイアウォールの問題を確認します

これは必要です。MySQL サーバーにさえ接続できない場合、他に何にアクセスできるでしょうか。 確認方法は? Ping 192.168.0.11 ping が機能する場合は、Ping 192.168.0.11:3306 でポート 3306 がファイアウォールによってブロックされているかどうかを確認するか、問題がなければファイアウォールをオフにしてサービス iptables を停止する (Red Hat ) か、ufw disable (ubuntu) を実行します。このステップで次のステップを開始します:

2. アクセス権限があるか確認します

アクセス権について言えば、MySQL はユーザーを割り当てるときにホストを指定します。たとえば、私のホストは 192.168.0.5 として指定されており、このアカウントにアクセスできるのはこのマシンのみです。他のマシンがこのアカウントを使用してアクセスすると、プロンプトが表示されます。権限がありません。 host を % として指定すると、すべてのマシンがアクセスを許可されます。一般的に、セキュリティ上の理由から、最小特権の原則に従って、権限についてはあまり説明しません。その方法がわからない場合は、マニュアルをご確認ください。 権限に問題がないことを確認したら、次のステップに進みます:
3. MySQL の構成を確認するには

MySQL の設定ファイルを確認します。Linux では my.cnf と呼ばれ、Windows では my.ini という設定項目を確認します。

マニュアルからの引用: バインド先の IP アドレス。このオプションが複数回指定された場合、指定された最後のアドレスが使用されます。アドレスが指定されていないか、0.0.0.0 が指定されている場合、サーバーはすべてのインターフェイスで待機します。

バインドされた IP は 1 つの IP にのみバインドできます。複数の IP がバインドされている場合は、最後にバインドされた IP が優先されます。バインディングがない場合、またはバインディング 0.0.0.0 の場合、サーバーはすべてのクライアントをリッスンします。

一度、この問題を解決するために午後を費やしましたが、ネットワーク接続を確認したところ、アクセス許可は問題ありませんでしたが、クライアントは接続できませんでした。マニュアル、分かりました。 ご不明な点がございましたら、マニュアルをもっと読んでください

www.bkjia.com本当http://www.bkjia.com/PHPjc/632926.html技術記事 PHP が MySQL に接続できない原因としては、機能が有効になっていない、または MySQL データベースの構成に問題があることが考えられます。PHP が MySQL に接続できない問題の分析と解決策を紹介します。 ...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート