MySQL サーバーが消えた: 「一般エラー: 2006」の謎を詳しく調べる
MySQL データベースに一括挿入を実行すると、恐ろしい「SQLSTATE[HY000]: 一般エラー: 2006 MySQL サーバーが消えました」エラーが表示されることがあります。この一見とらえどころのない問題は、データベース操作の円滑な実行を妨げます。その秘密を解明するために、私たちはこの不可解なエラーを理解し、潜在的な解決策を探る旅に乗り出します。
隠れた原因の解明: wait_timeout
MySQL サーバーには、消えてしまいました」というエラーは、多くの場合、タイムアウト制限が原因で発生します。具体的には、wait_timeout という名前の MySQL 変数に由来します。この変数は、接続を終了する前に MySQL がクライアントのアクティビティを辛抱強く待つ時間 (秒単位) を決定します。
デフォルトでは、共有ホストでは wait_timeout が 30 秒に設定されます。ただし、データベース操作がこの制限時間を超えると、接続が突然終了され、前述のエラーが発生します。
問題の解決: wait_timeout の調整
これを解決するにはこの問題では、データベース操作の期間に合わせて待機時間を延長する必要があります。これは、クエリ「SET session wait_timeout=28800」を発行することで実現できます。これにより、現在のセッションの wait_timeout が 28800 秒 (8 時間) に設定されます。
追加の考慮事項: インタラクティブ タイムアウト
特定のシナリオでは、wait_timeout と一緒に interactive_timeout 変数も変更する必要がある場合があります。この変数は、アイドル状態の対話型接続の最大継続時間を制御します。 interactive_timeout がオペレーションの実行時間より短い場合、接続は突然閉じられ、同じエラーが発生します。
実装: PHP コード
このソリューションを実装するにはPHP では、次のコード サンプルを利用します:
<code class="php">$results = $db->query("SHOW VARIABLES LIKE '%timeout%'", TRUE); echo "<pre class="brush:php;toolbar:false">"; var_dump($results); echo ""; $results = $db->query("SET session wait_timeout=28800", FALSE); // UPDATE - this is also needed $results = $db->query("SET session interactive_timeout=28800", FALSE); $results = $db->query("SHOW VARIABLES LIKE '%timeout%'", TRUE); echo "
"; var_dump($results); echo "";
データベース操作を実行する前に、次の行を PHP スクリプトに追加してタイムアウト設定を調整します。これにより、「MySQL サーバーが消えました」エラーが発生することなく操作を完了できます。
以上がMySQL サーバーで「一般エラー: 2006 MySQL サーバーが消えました」というメッセージが表示され続けるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。