MySQL 연결 오류

배상건·2022년 4월 12일
0

에러 관리

목록 보기
1/4
➜  server git:(master) ✗ npm start

> cmarket-database-server@1.0.0 start
> nodemon app.js

[nodemon] 2.0.13
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
      🚀 Server is starting on 4000
/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/db/index.js:11
  if (err) throw err;
           ^

Error: connect ECONNREFUSED ::1:3306
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16)
    --------------------
    at Protocol._enqueue (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mysql/lib/Connection.js:116:18)
    at Object.<anonymous> (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/db/index.js:10:5)
    at Module._compile (node:internal/modules/cjs/loader:1099:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:999:19)
    at require (node:internal/modules/cjs/helpers:102:18) {
  errno: -61,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '::1',
  port: 3306,
  fatal: true
}

Node.js v17.8.0
[nodemon] app crashed - waiting for file changes before starting...
➜  server git:(master) ✗ npm test

> cmarket-database-server@1.0.0 test
> export NODE_ENV=test && mocha spec/server-spec.js --timeout 5000 --exit && unset NODE_ENV



  🗄  Cmarket Database
    1) "before all" hook in "🗄  Cmarket Database"
    2) "before all" hook in "🗄  Cmarket Database"
    3) "after all" hook in "🗄  Cmarket Database"


  0 passing (37ms)
  3 failing

  1) 🗄  Cmarket Database
       "before all" hook in "🗄  Cmarket Database":
     Uncaught Error: connect ECONNREFUSED ::1:3306
      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16)
      --------------------
      at Protocol._enqueue (node_modules/mysql/lib/protocol/Protocol.js:144:48)
      at Protocol.handshake (node_modules/mysql/lib/protocol/Protocol.js:51:23)
      at Connection.connect (node_modules/mysql/lib/Connection.js:116:18)
      at Object.<anonymous> (db/index.js:10:5)
      at Module._compile (node:internal/modules/cjs/loader:1099:14)
      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
      at Module.load (node:internal/modules/cjs/loader:975:32)
      at Function.Module._load (node:internal/modules/cjs/loader:822:12)
      at Module.require (node:internal/modules/cjs/loader:999:19)
      at require (node:internal/modules/cjs/helpers:102:18)
      at Object.<anonymous> (models/index.js:1:12)
      at Module._compile (node:internal/modules/cjs/loader:1099:14)
      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
      at Module.load (node:internal/modules/cjs/loader:975:32)
      at Function.Module._load (node:internal/modules/cjs/loader:822:12)
      at Module.require (node:internal/modules/cjs/loader:999:19)
      at require (node:internal/modules/cjs/helpers:102:18)
      at Object.<anonymous> (controllers/index.js:1:16)
      at Module._compile (node:internal/modules/cjs/loader:1099:14)
      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
      at Module.load (node:internal/modules/cjs/loader:975:32)
      at Function.Module._load (node:internal/modules/cjs/loader:822:12)
      at Module.require (node:internal/modules/cjs/loader:999:19)
      at require (node:internal/modules/cjs/helpers:102:18)
      at Context.<anonymous> (spec/server-spec.js:23:24)
      at processImmediate (node:internal/timers:466:21)

  2) 🗄  Cmarket Database
       "before all" hook in "🗄  Cmarket Database":
     done() called multiple times in hook <🗄  Cmarket Database "before all" hook in "🗄  Cmarket Database"> of file /Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/spec/server-spec.js; in addition, done() received error: Error: connect ECONNREFUSED ::1:3306
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16)
    --------------------
    at Protocol._enqueue (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mysql/lib/Connection.js:116:18)
    at Context.<anonymous> (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/spec/server-spec.js:31:18)
    at callFnAsync (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mocha/lib/runnable.js:394:21)
    at Hook.Runnable.run (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mocha/lib/runnable.js:338:7)
    at next (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mocha/lib/runner.js:510:10)
    at Immediate.<anonymous> (/Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/node_modules/mocha/lib/runner.js:572:5)
    at processImmediate (node:internal/timers:466:21) {
  errno: -61,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '::1',
  port: 3306,
  fatal: true
}
  Error: done() called multiple times in hook <🗄  Cmarket Database "before all" hook in "🗄  Cmarket Database"> of file /Users/sg.yksv77/Desktop/섹션3/im-sprint-cmarket-database/server/spec/server-spec.js; in addition, done() received error: Error: connect ECONNREFUSED ::1:3306
      at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16)
      --------------------
      at Protocol._enqueue (node_modules/mysql/lib/protocol/Protocol.js:144:48)
      at Protocol.handshake (node_modules/mysql/lib/protocol/Protocol.js:51:23)
      at Connection.connect (node_modules/mysql/lib/Connection.js:116:18)
      at Context.<anonymous> (spec/server-spec.js:31:18)
      at processImmediate (node:internal/timers:466:21) {
    errno: -61,
    code: 'ECONNREFUSED',
    syscall: 'connect',
    address: '::1',
    port: 3306,
    fatal: true
  }
      at Handshake.<anonymous> (node_modules/mysql/lib/Connection.js:526:10)
      at Handshake._callback (node_modules/mysql/lib/Connection.js:488:16)
      at Handshake.Sequence.end (node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
      at Protocol.handleNetworkError (node_modules/mysql/lib/protocol/Protocol.js:369:14)
      at Connection._handleNetworkError (node_modules/mysql/lib/Connection.js:418:18)
      at Socket.emit (node:events:527:28)
      at emitErrorNT (node:internal/streams/destroy:164:8)
      at emitErrorCloseNT (node:internal/streams/destroy:129:3)
      at processTicksAndRejections (node:internal/process/task_queues:83:21)

  3) 🗄  Cmarket Database
       "after all" hook in "🗄  Cmarket Database":
     TypeError: Cannot read properties of undefined (reading 'close')
      at Context.<anonymous> (spec/server-spec.js:243:9)
      at processImmediate (node:internal/timers:466:21)

핵심 에러

Error: connect ECONNREFUSED ::1:3306

원인 : node와 MySQL 열결이 되지 않았기 때문이다.

해결법(macOS) :

  1. MySQL이 제대로 설치됐고, 실행까지 완료하였는지 확인한다.
    1) MySQL 설치

    	```jsx
    	// Homebrew를 이용한 설치
       brew install mysql
    		brew info mysql
    	```
    
    	2) MySQL 서비스 시작
    brew services start mysql

    3) MySQL 접속
    mysql -u root -p

    그러나, 현재 MySQL은 정상적으로 설치 및 실행까지 완료 되어 있음에도 에러가 발생했기 때문에, 다른 원인을 확인해야 한다.

npm start에서 발생한 에러 코드의 하단을 확인하면

Node.js v17.8.0

인것을 확인할 수 있다. 이유는 정확히 알 수 없지만,
node 버전이 LTS인 v16.14.2가 아닌 것이 원인인 듯 하다.

이에, 두번째 해결방법을 사용하였다.

  1. node 버전 변경 v17.8.0 -> v16.14.2
    1) nvm 설치 확인

     nvm --version
    * command not found 에러 발생
    * nvm 설치가 되지 않을 것으로 예상되어 nvm를 다시 설치하기로 했다.

    2) nvm 설치

    wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
    
     brew update
    
     brew install wget

    3) nvm 설치 확인
    아래와 같은 화면이 나오면 성공적으로 설치가 됐으며, 터미널을 닫고, 새로 열면 명령어 nvm을 사용 할 수 있게 된다.

    4) node.js 설치(M1)

    2020년 말 이후 출시된 M1 칩을 이용하는 Mac은 15버전 이상의 node.js를 사용해야한다. 15버전 미만의 버전을 사용할 경우, 제대로 설치되지 않을 수 있다.

      nvm install 15

    5) node 버전 적용

    #버전 확인
      nvm ls
      nvm use 16.14.2

에러 관리 성공

➜  server git:(master) ✗ node -v
v17.8.0
➜  server git:(master) ✗ nvm ls
       v12.18.3
       v14.17.0
       v15.14.0
       v16.13.0
       v16.14.2
        v17.9.0
->       system
default -> system
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.9.0) (default)
stable -> 17.9 (-> v17.9.0) (default)
lts/* -> lts/gallium (-> v16.14.2)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.19.1 (-> N/A)
lts/gallium -> v16.14.2
➜  server git:(master) ✗ nvm use 16.14.2
Now using node v16.14.2 (npm v8.5.0)
➜  server git:(master) ✗ node -v
v16.14.2
➜  server git:(master) ✗ npm start

> cmarket-database-server@1.0.0 start
> nodemon app.js

[nodemon] 2.0.13
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
      🚀 Server is starting on 4000
profile
목표 지향을 위해 협업하는 개발자

0개의 댓글