[MySQL] Error: ER_NOT_SUPPORTED_AUTH_MODE 에러 해결

토이 프로젝트 개발중 새로운 MySQL을 설치하고 백엔드 서버에서 접속하려고 할때 아래와 같은 에러 발생

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
\node_modules\mysql\lib\protocol\Parser.js:437
throw err; // Rethrow non-MySQL errors
^

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError
at Handshake.ErrorPacket
at Protocol._parsePacket
at Parser._parsePacket
at Parser.write
at Protocol.write
at Socket.<anonymous>
at Socket.<anonymous>
at Socket.emit
at addChunk
--------------------
at Protocol._enqueue
at Protocol.handshake
at Connection.connect
at Object.<anonymous>
at Module._compile
at Object.Module._extensions..js
at Module.load
sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
sqlState: '08004',
fatal: true
}

내 개발 환경은 백엔드는 현재 로컬에서 작업중이고 MySQL은 AWS 서버에 올려둔 상태로 AWS에서는 외부 접속의 개념이 됨

아이디는 root에 비밀번호가 11111111을 예로 아래와 같은 쿼리를 실행하여 해결

1
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '11111111';

[MySQL] 이벤트 스케줄 사용시 주의사항

이벤트 스케줄을 사용할때 시간을 지정해서 사용

예를들면 하루 한번 0시에 어떤 작업을 실행

그런데 이 실행 시각이 언제를 기준으로 하는지 확인 하기 위해서 MySQL의 시간을 먼저 확인

1
SELECT NOW();

한국의 시간과 9시간이 차이가 나는것을 확인할 수 있었음

그리고 내가 설정할 이벤트 스케줄의 시간을 MySQL 시간을 기준으로 1분뒤에 실행하도록 설정하고 확인한 결과는

이벤트 스케줄은 MySQL의 시간을 기준으로 실행된다.

관리를 편하게 하기 위해 MySQL의 시간을 한국 시간으로 변경

1
set time_zone='Asia/Seoul';

그리고 실제 해당 시각에 정상 실행되는 것을 확인 할 수 있었음

[MySQL] 두 컬럼의 값 바꾸기

DB의 두 컬럼의 값이 바뀌어 들어가는 실수가 발생했을때 아래와 같이 두 컬럼의 값을 바꿀 수 있음

1
2
3
4
5
6
UPDATE
[TABLE_NAME]
SET
A = (@temp:=A),
A = B,
B = @temp

이때 주의해야 할 점이 A = (@temp:=A)에서 콜론이 들어간다는것

만약 콜론을 빼고 UPDATE를 실행한다면 B 컬럼에 NULL이 들어가니 신중히 실행해야함

가장 좋은 방법은 테스트용 DB에서 실행한 결과를 확인하고 운영 DB에 적용하는것이 좋다

[MySQL] access denied for user

토이 프로젝트를 만드는 중에 프로시져를 사용해야 할 일이 생김

프로시져에 대해서 공부하고 테스트 서버에서 프로시져 생성 명령어를 실행하는데 아래와 같은 에러 발생

1
Access denied for user 'root'@'%' to database 'information_schema'

거의 반나절을 구글링과 스택오버플로우를 찾아봤는데도 해답을 찾을 수 없었음

대부분 권한 문제 때문이라고 하는데 이미 필요한 권한은 다 가지고있었음

그리고 며칠 지나 다시 문제를 풀어보려고 열었는데 에러 문구에 database 'information_schema' 부분이 자꾸 거슬렸음

그래서 이 부분에 초점을 두고 database를 내가 원하는 데이터베이스로 설정 후 프로시져를 생성하니 성공

1
2
3
use my_database

// procedure 생성

너무 허무하다.. 😪