mysql을 brew로 설치하고 nodejs와 mysql을 연동하게되면 아래와 같은 에러가 발생할수 있다.
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError (/Users/***/Desktop/database/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
at Handshake.ErrorPacket (/Users/***/Desktop/database/node_modules/mysql/lib/protocol/sequences/Handshake.js:123:18)
at Protocol._parsePacket (/Users/***/Desktop/database/node_modules/mysql/lib/protocol/Protocol.js:291:23)
at Parser._parsePacket (/Users/***/Desktop/database/node_modules/mysql/lib/protocol/Parser.js:433:10)
at Parser.write (/Users/***/Desktop/database/node_modules/mysql/lib/protocol/Parser.js:43:10)
at Protocol.write (/Users/***/Desktop/database/node_modules/mysql/lib/protocol/Protocol.js:38:16)
at Socket.<anonymous> (/Users/***/Desktop/database/node_modules/mysql/lib/Connection.js:88:28)
at Socket.<anonymous> (/Users/***/Desktop/database/node_modules/mysql/lib/Connection.js:526:10)
at Socket.emit (events.js:321:20)
at addChunk (_stream_readable.js:294:12)
--------------------
at Protocol._enqueue (/Users/***/Desktop/database/node_modules/mysql/lib/protocol/Protocol.js:144:48)
at Protocol.handshake (/Users/***/Desktop/database/node_modules/mysql/lib/protocol/Protocol.js:51:23)
at Connection.connect (/Users/***/Desktop/database/node_modules/mysql/lib/Connection.js:116:18)
at Object.<anonymous> (/Users/***/Desktop/database/server/db/index.js:15:5)
at Module._compile (internal/modules/cjs/loader.js:1157:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1177:10)
at Module.load (internal/modules/cjs/loader.js:1001:32)
at Function.Module._load (internal/modules/cjs/loader.js:900:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
at internal/main/run_main_module.js:18:47 {
code: 'ER_NOT_SUPPORTED_AUTH_MODE',
errno: 1251,
sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
sqlState: '08004',
fatal: true
}
brew로 mysql을 설치하고 비밀번호는 설정 하지 않았다.
비밀번호를 설정하지 않은것과 비밀번호가 ""(빈 문자열)
은 차이가 있는것 같다.
비밀번호를 빈문자열로 바꿔서 접속이 가능한지 테스트 해보았다.
접속이 정상적으로 처리 되었다.
해결 이후,
왜 이러한 에러가 있었는지에 대해서 찾아보다가 유튜브 댓글이 도움이 될것 같아 링크를 걸어 두었다.
주의
비밀번호가 없거나, 간단한 비밀번호는 권장하지 않는다.
참고 mysql 비밀번호 변경
안되시는 분들 아래 링크에서 설명한거 읽어보세요.
- 참고
8.0 버전으로 오면서 외부접속 시 로컬 비밀번호가 아니라 암호화된 다른 비밀번호를 사용하도록 바뀐 것 같습니다. 그래서 일반적으로 접속할 때 사용하는 비밀번호로도 외부에서 접속이 가능하게끔 설정해주어야 합니다.
create user '유저명'@'%' identified with mysql_native_password by '비번';
이 명령어로 기존 방식으로 암호를 사용하여 접속이 가능한 유저를 새로 만들어주시고,
grant all privileges on . to '유저명'@'%';
이 명령어로 권한을 주시면 강의와 같이 잘 동작합니다.
-유튜브 생활코딩 댓글 중 링크-
덕분에 문제 해결했습니다 감사합니다 : )