ホームページ >データベース >mysql チュートリアル >MySQL の使用時に Node.js アプリで「接続が失われました: サーバーが接続を閉じました」エラーが発生するのはなぜですか?

MySQL の使用時に Node.js アプリで「接続が失われました: サーバーが接続を閉じました」エラーが発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 03:09:10341ブラウズ

Why Does My Node.js App Get

接続が失われました: Node.js での MySQL 切断のトラブルシューティング

Node.js ユーザーは、「接続が失われました: サーバーが接続を閉じました」というメッセージが表示される場合があります。 「mysql モジュールを使用するときにエラーが発生します。この問題は、サーバーが TCP 接続を突然終了した場合に発生します。多くの場合、特定の時間範囲内 (例: 午前 0 時から午前 2 時の間)。

原因

エラーは次のことを示しています。 Node.js と MySQL サーバー間の接続がサーバーによって切断されたこと (通常は予期しない切断またはサーバーが原因) restart.

解決策

この問題に対処するには、失われた接続を自動的に検出して再確立する接続処理メカニズムを採用できます。次に例を示します。

var db_config = {
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'example'
};

var connection;

function handleDisconnect() {
  connection = mysql.createConnection(db_config);

  connection.connect(function(err) {
    if (err) {
      console.log('error when connecting to db:', err);
      setTimeout(handleDisconnect, 2000);
    }
  });

  connection.on('error', function(err) {
    console.log('db error', err);
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
      handleDisconnect();
    } else {
      throw err;
    }
  });
}

handleDisconnect();

説明

このソリューションでは:

  1. db_config オブジェクトはデータベース接続パラメーターを指定します。
  2. handleDisconnect 関数が呼び出され、新しい接続が作成され、エラー ハンドラーが接続されます。
  3. サーバーの再起動またはアイドル タイムアウトにより接続が失われた場合、エラー ハンドラーがそれを検出し、handleDisconnect 関数を再度呼び出して接続を再作成します。
  4. setTimeout 関数は過度の接続を防ぎます。再試行する前に遅延を導入することで、再接続を試行します。

この接続処理メカニズムを実装することで、アプリケーションが適切に処理できることを保証できます。一時的な接続損失を防ぎ、サーバーの再起動中やメンテナンス期間中であっても、MySQL データベースへの信頼性の高い接続を維持します。

以上がMySQL の使用時に Node.js アプリで「接続が失われました: サーバーが接続を閉じました」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。