공부기록/Backend

[에러] mysql에러 connect ECONNREFUSED ::1:3306 at PromisePool.execute code: 'ECONNREFUSED', errno: -61,

Jenner 2023. 7. 14. 16:21

[문제 해결을 위한 메모장입니다 틀릴 수 있습니다]

에러 상황 : 

mysql2로 node js에서 createPool을 하여 아래와 같은 코드를 작성 후 접속하려고 했는데, 

const mysql2 = require("mysql2");

const pool = mysql2.createPool({
  host: "localhost",
  user: "root",
  database: "tomato-backend",
});

module.exports = pool.promise();

 

다음과 같은 에러가 발생했다.

 

 

 

 

에러 해결 : 

 

const mysql2 = require("mysql2");

const pool = mysql2.createPool({
  host: "127.0.0.1",
  user: "root",
  database: "tomato-backend",
});

module.exports = pool.promise();

 

에러이유 : 

검색해본 결과 

https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=ez_&logNo=140119374985 

 

MySQL : 원격 접속이 안될 때

로컬에서는 잘 접속되는 MySQL 서버에, 원격지에서 접속이 안되는 경우가 있다. 이럴 때는 다음의 내용...

blog.naver.com

위의 블로그 글에서 해답을 찾을 수 있었다. 

 

 

 

 

mysql은 TCP/IP를 통한 연결과 소켓파일을 통한 로컬 연결을 지원한다.

 

호스트명을 명시하지 않거나, localhost라고 입력했을 경우 유닉스 소켓파일이 사용된다.

그러나 유닉스 소켓파일에 엑세스할 권한이 없거나

기본 소켓 파일경로를 사용하여 연결을 시도했는데

해당 파일이 해당 경로에 존재하지 않은경우 (삭제되거나 이동등의 이유로)

소켓파일 연결이 실패하게 된다. 

 

나의 경우 기본 소켓 파일 경로에 해당 소켓파일이 존재하지 않았기 떄문에 

연결이 불가했던 것이다. 

(그런데 그 전날에는 잘 되었는데 오늘은 갑자기 왜 안되는지...ㅠ)

 

이런 경우 TCP/IP를 통해 연결하도록 host명에 "127.0.0.1"로 명시하여주면 해결이 된다고 한다. 

 

이후에는 소켓파일을 기본경로에 만들어서 넣든지, 

재설치를 통해 자동으로 소켓파일이 다운로드 되도록 하든지 

방법을 찾아서 소켓 파일 로컬 연결이 되도록 만들어봐야겠다.