그래서 docker에서 log를 읽어봤는데 Error: Connection lost: The server closed the connection 라는 에러메세지가 있었다.
npm mysql문서를 읽어보니 위와 같은 문장이 있었다. 에러는 mysql에서 일정시간동안 활동하지 않는 connection이 있으면 끊어버려서 발생하는 것이었다.
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();
첫째로 코드를 다음과 같이 작성하여 DB와 연결이 끊어졌을때 다시 연결을 시도하도록 한다.
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'example'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
connection.end();
두번째는 query 실행 후 connection.end()를 통해 connection을 종료시켜줬는지 확인하는 것이다. 내가 진행했던 프로젝트에서 나타났던 문제점이었다.
마지막으로 interactive_timeout, wati_timeout값을 적정한 값으로 수정하는것이다. 이는 활동하지 않는 connection을 끊을때까지 서버가 대기하는 시간이고 mysql의 경우는 28800초로 8시간이다.