0

一部のデータ (通常は一度に約 200 ~ 300kb) を記録しようとするスクリプトがあります。かなり長い間、問題なく動作しています。MySQL サーバーまたは処理サーバー上の PHP に対して行われた構成変更については知りません。昨日、次のコード ブロックが誤動作し始めました。2 日前、「$sqlBucket」クエリは正常に機能しました。現在、失敗し、mysql_error は「MySQL サーバーが消えました」を返します。最初の if ブロックにデバッグを追加すると、次のように出力されます。

The Link Is Down
Link still down

コード:

if (!mysql_ping($conn))  {
   echo "The Link Is Down!\n";
   mysql_close($conn);
   if (!($conn = mysql_connect($hostname,$username,$password))) echo "Fail " . $mysql_error() . "\n";
   mysql_select_db($db,$conn);
   if (!mysql_ping($conn)) echo "Link still down\n";
}
if (!mysql_query($sqlBucket, $conn)) {
    echo "Could not execute: {$sqlBucket}" . mysql_error() . "\n";
}

誰かがチェック、デバッグ、再構成などについて何か考えがある場合、私はアイデアを使い果たしました。ありがとう。

編集:追加情報

スクリプトが実行され、約 3 秒で失敗します。

MySQL サーバーの wait_timeout 値は 28800 です。

コマンドラインからクエリを正常に送信できます。

mysql_connect 関数にチェックを追加し、成功を報告しています (少なくとも、出力に「失敗」は表示されません)。

4

2 に答える 2

1

テーブル構造とインデックスを確認してください。テーブルが大きくなると、データの書き込みに時間がかかる場合があります。200 ~ 300 kB はかなりの量のデータに聞こえますが、これはすぐに蓄積されます (3 ~ 4 回の更新ごとに 1 MB)。

また、MySQLスロー クエリ ログを有効にして、システムのどこで速度が低下しているかを正確に確認します。

于 2013-01-24T04:29:20.813 に答える
0

死後:

どうやらこれに対する解決策は、私が受け取っていたエラーコードとはほとんど関係がありませんでした。結局のところ、部屋を空けるために、余分なテーブルを削除しました。さて、私が気付いていなかったのは、別の開発者がこのテーブルにデータを入力するトリガーを持っていたということです。元の質問で参照したコードブロックの下のブロックでクエリに関与したテーブルへの挿入に対してトリガーが呼び出されました。私が気付いたのは、コードが最初は正常に実行され、その後失敗していたことです。何が起こっていたのかというと、トリガーエラーがどういうわけかサーバーへの接続を切断していたということでした。トリガーをドロップした後、スクリプトは正常に実行を開始しました。

接続をやり直しても、最初の反復時のように接続を続行して動作させることができなかった理由はまだわかりません。

于 2013-01-28T16:24:00.670 に答える