V-logue

[MySQL / MariaDB] Can't add new command when connection is in closed state 본문

Error

[MySQL / MariaDB] Can't add new command when connection is in closed state

보그 2023. 7. 12. 18:24

회사생활을 하던 중, FE에서 원인을 알 수 없는 DB 에러가 발생했다고 해서 찾아봤다.

 

우리는 하나의 Pool에 Connection을 생성해서 사용하는 방식을 채용하고 있는데,

저번에는 finally에서 connection.release()가 먹히지 않아 커넥션이 터지더니 이번에는

원인을 알 수 없는 에러가 떠버렸다.

 

Can't add new command when connection is in closed state

 

인터넷을 찾아보니, pool을 다시 생성해서 connection을 만들라는 말이 있어서,

그렇게 해보니 에러가 뜨지 않았다.

 

검색결과 정확히 하나의 원인을 찾기 어려운 문제였기 때문에 일단 해결한 것으로 만족.

 

try ~ catch로 createPool을 감싸고, connection을 만드는 부분에

!pool을 넣고 해결했다.

try {

	if(!pool){ 
    	
        let pool2 = mysql.createPool({
          host: process.env.HOST,
          user: process.env.USER,
          password: process.env.PASSWORD,
          database: process.env.NAME,
          port: process.env.PORT,
          connectTimeout: 10000
        });
        
        pool = pool2;
        
        return pool.getConnection();
    }
	conn = await pool.getConnection();
} catch (e) {
	
}

 

굳이 설명을 하자면 이런식이었다.

물론 더 복잡하겠지만, 이정도만 봐도 알사람은 알지 않을까...

Comments