テスト サーバーと新しい運用サーバーの両方を php 5.2 から 5.4.7 にアップグレードしました。さらに、PHP コードでは、mysql データベースに接続する古い方法を新しい方法に置き換えました (したがって、mysql_connect() の代わりに mysqli_connect() メソッドを使用します。これは、古い方法が PHP バージョン 4.5 以降で廃止されるためです。
すべてが正常に動作しているようで、十分にテストされていると思いましたが、個々の一括挿入クエリを実行すると、mysql 接続がハングすることがわかりました。これは、テスト サーバーと運用サーバー (Centos Linux) の両方で発生します。したがって、PHP は正常に接続を確立します。接続が途中で失われるのは、一括挿入を行う場合のみです。
テスト サーバー (Windows XP、XAMPP を使用) では、次のエラー メッセージが表示されます。
mysqli_connect():(HY000/2002): 通常、各ソケット アドレス (プロトコル/ネットワーク アドレス/ポート) の使用は 1 つだけ許可されます
Linux マシンで次のエラー メッセージが表示されます。
mysqli_connect():(HY000/2003): '127.0.0.1'(99) で MySQL サーバーに接続できません
私が基本的にやっていることは次のとおりです。
クエリ結果をWhileループする
{
$query="insert into (a,b,c,d)values(1,2,3,4)";
query_execute($クエリ);
}
問題は、私が多くのインサートを実行しているという事実にあると思います。約 100.000 の個別のインサート。永続的な mysql 接続を使用していません。
これを引き起こしている原因(mysql、PHP、サーバー自体)についてはわかりませんか?
追加: クエリを実行/実行するコード (簡略化) は次のようなものです。
//the database connection class
class database($query)
{
public function setup_connection() {
$this->link=mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
}
public function execute_query($query){
mysqli_query($this->link, $query);
}
}
//a regular php page using the class
$obj_db1=new database($query);
while($obj_db1->loop())
{
$obj_db_insert=new database($query);
}