https://enchoyism.github.io/2018/02/02/nodejs-mysql-connection-lost/
https://stackoverflow.com/questions/20210522/nodejs-mysql-error-connection-lost-the-server-closed-the-connection
nodejs로 만들고 있는 블로그의 db를 mysql로 구성하였다.
테스트용 서버에 올려두고 하룻밤 자고난 뒤에 자꾸 서버가 죽어있어서 로그를 찾아본 결과,
그대로 구글에 찾아보았다.
결론부터 보면 nodejs server에서 db에 connection을 연결했는데 별다른 활동을 하지 않으면, mysql server 쪽에서 connection을 끊어버리는 것이다.
interactive_timeout, wait_timeout의 값이 활동하지 않은 connection의 대기시간이라고 한다.
내 db는 28000 sec = 8 hours 였다.
스택오버플로우에서 해결하는 방법을 보는데
setInterval(function () {
db.query('SELECT 1');
}, 5000);
내 server는 상시 연결해둬야 하도록 코드 구성이 되어있어 이런 방법이 간단하고 괜찮아 보였다.
이 방법에 대한 의견 번역이 좀 과격하긴 한데..
다음과 같은 코드로 바꿔서 적용했다.
// db
const connectDummy = () => {
connection.query(`select 1;`, (error, rows) => {
// none..
});
}
//---
// util js
const sendPingDB = () => {
print(`sendPingDB()`);
db.connectDummy();
setTimeout(sendPingDB, 20000000);
}
const startSendPingDB = () => {
setTimeout(sendPingDB, 20000000);
}