Rumah > pangkalan data > tutorial mysql > Mengapa Sambungan MySQL Node.js Saya Terus Terputus Sekitar Tengah Malam?

Mengapa Sambungan MySQL Node.js Saya Terus Terputus Sekitar Tengah Malam?

Susan Sarandon
Lepaskan: 2024-12-09 01:51:12
asal
1023 orang telah melayarinya

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

Sambungan MySQL Hilang: Menyelesaikan Ralat "Sambungan hilang: Pelayan menutup sambungan"

Apabila bekerja dengan Node.js dan MySQL, anda mungkin kadangkala menghadapi ralat yang menunjukkan bahawa pelayan menutup sambungan. Ini biasanya berlaku sekitar 12:00 hingga 2:00 PG, membuatkan anda tertanya-tanya. Mesej ralat sering muncul sebagai:

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)
Salin selepas log masuk

Walaupun mencuba penyelesaian yang disyorkan, isu ini berterusan. Berikut ialah pendekatan yang lebih komprehensif untuk mengendalikan ralat ini dengan berkesan:

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();
Salin selepas log masuk

Kod ini melakukan perkara berikut:

  1. Mencipta semula objek sambungan MySQL dalam fungsi pemutus sambungan .
  2. Percubaan untuk menyambung semula dengan memanggil connection.connect() dalam handleDisconnect.
  3. Jika ralat berlaku semasa menyambung, ia mencatat ralat dan menjadualkan percubaan penyambungan semula dalam masa 2 saat untuk mengelakkan percubaan penyambungan semula yang berlebihan.
  4. Ia mewujudkan pendengar acara 'ralat' pada sambungan membantah untuk memantau sebarang ralat yang mungkin timbul semasa kitaran hayat sambungan.
  5. Apabila Ralat 'PROTOCOL_CONNECTION_LOST' dikesan, menandakan sambungan terputus akibat permulaan semula pelayan atau tamat masa melahu, ia mencetuskan fungsi Putuskan sambungan sekali lagi untuk mencipta semula dan menyambung semula.

Dengan melaksanakan pendekatan ini, anda boleh mengendalikan sambungan MySQL dengan berkesan kehilangan ralat dan memastikan sambungan pangkalan data yang lancar dalam aplikasi Node.js anda.

Atas ialah kandungan terperinci Mengapa Sambungan MySQL Node.js Saya Terus Terputus Sekitar Tengah Malam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan