Maison > base de données > tutoriel mysql > Pourquoi ma connexion MySQL Node.js continue-t-elle de s'interrompre vers minuit ?

Pourquoi ma connexion MySQL Node.js continue-t-elle de s'interrompre vers minuit ?

Susan Sarandon
Libérer: 2024-12-09 01:51:12
original
1004 Les gens l'ont consulté

Why Does My Node.js MySQL Connection Keep Dropping Around Midnight?

Connexion MySQL perdue : résolution de l'erreur « Connexion perdue : le serveur a fermé la connexion »

Lorsque vous travaillez avec Node.js et MySQL, vous pouvez occasionnellement rencontrer une erreur indiquant que le serveur a fermé la connexion. Cela se produit généralement entre minuit et 2 heures du matin, ce qui vous laisse perplexe. Le message d'erreur s'affiche souvent comme :

Error: Connection lost: The server closed the connection.
at Protocol.end (/opt/node-v0.10.20-linux-x64/IM/node_modules/mysql/lib/protocol/Protocol.js:73:13)
at Socket.onend (stream.js:79:10)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:920:16
at process._tickCallback (node.js:415:13)
Copier après la connexion

Malgré la solution recommandée, le problème persiste. Voici une approche plus complète pour gérer cette erreur efficacement :

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

var connection;

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

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

  connection.on('error', function(err) {
    console.log('db error', err);
    if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection lost due to server restart or idle timeout
      handleDisconnect();
    } else {
      throw err;
    }
  });
}

handleDisconnect();
Copier après la connexion

Ce code effectue les opérations suivantes :

  1. Recrée l'objet de connexion MySQL dans la fonction handleDisconnect .
  2. Tentative de reconnexion en appelant connection.connect() dans handleDisconnect.
  3. Si un Une erreur se produit lors de la connexion, il enregistre l'erreur et planifie une tentative de reconnexion dans 2 secondes pour éviter des tentatives de reconnexion excessives.
  4. Il établit un écouteur d'événement « erreur » sur l'objet de connexion pour surveiller toute erreur pouvant survenir pendant la connexion. cycle de vie de la connexion.
  5. Lorsqu'une erreur 'PROTOCOL_CONNECTION_LOST' est détectée, signifiant une perte de connexion en raison du redémarrage du serveur ou d'un délai d'inactivité, elle se déclenche la fonction handleDisconnect à nouveau pour recréer et reconnecter.

En mettant en œuvre cette approche, vous pouvez gérer efficacement les erreurs de perte de connexion MySQL et assurer une connectivité transparente à la base de données dans vos applications Node.js.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal