Heim >Datenbank >MySQL-Tutorial >Warum bricht meine Node.js-MySQL-Verbindung immer wieder um Mitternacht ab?

Warum bricht meine Node.js-MySQL-Verbindung immer wieder um Mitternacht ab?

Susan Sarandon
Susan SarandonOriginal
2024-12-09 01:51:121057Durchsuche

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

MySQL-Verbindung verloren: Behebung des Fehlers „Verbindung verloren: Der Server hat die Verbindung geschlossen“

Beim Arbeiten mit Node.js und MySQL Gelegentlich kann es zu einer Fehlermeldung kommen, die darauf hinweist, dass der Server die Verbindung geschlossen hat. Dies geschieht normalerweise zwischen 12:00 und 2:00 Uhr morgens und lässt Sie verwirrt zurück. Die Fehlermeldung erscheint oft wie folgt:

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)

Obwohl versucht wird, die empfohlene Lösung zu finden, besteht das Problem weiterhin. Hier ist ein umfassenderer Ansatz, um diesen Fehler effektiv zu behandeln:

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();

Dieser Code führt Folgendes aus:

  1. Erstellt das MySQL-Verbindungsobjekt in der Funktion handleDisconnect neu .
  2. Versuche, die Verbindung wiederherzustellen, indem „connection.connect()“ innerhalb von handleDisconnect aufgerufen wird.
  3. Wenn ein Wenn während der Verbindung ein Fehler auftritt, wird der Fehler protokolliert und innerhalb von 2 Sekunden ein erneuter Verbindungsversuch geplant, um übermäßige erneute Verbindungsversuche zu vermeiden.
  4. Es richtet einen „Fehler“-Ereignis-Listener für das Verbindungsobjekt ein, um alle Fehler zu überwachen, die während des Verbindungsaufbaus auftreten können Verbindungslebenszyklus.
  5. Wenn ein „PROTOCOL_CONNECTION_LOST“-Fehler erkannt wird, der auf einen Verbindungsverlust aufgrund eines Serverneustarts oder einer Leerlaufzeitüberschreitung hinweist, wird der Fehler ausgelöst handleDisconnect-Funktion erneut verwenden, um die Verbindung neu zu erstellen und wiederherzustellen.

Durch die Implementierung dieses Ansatzes können Sie MySQL-Verbindungsverlustfehler effektiv behandeln und eine nahtlose Datenbankkonnektivität in Ihren Node.js-Anwendungen sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum bricht meine Node.js-MySQL-Verbindung immer wieder um Mitternacht ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn