Error

[Error] mysql연결시 나는 오류 해결하기

Uheeking 2023. 2. 16. 22:58
반응형

나중에 정리해놓고 글을 보았을 때 유용하게 쓰일 것 같아 정리해보고자 한다.

문제 발생

오류 발생
오류 발생

이러한 오류가 뜨면서 db를 작업하는 tableplus에서는 드라이버가 어떠한 패킷에 대한 응답을 받지 않았다고 하여 에러가 발생하였다고 적혀있었다.

이 문제 발생시 방화벽에 대한 규제는 풀어주었기에 방화벽에 대한 에러는 아니었다. 또한 mysql의 경우 tcp/ip나 socket을 사용하여 mysql과 연결하는데, 내 경우 socket을 사용치 않으므로 tcp/ip를 사용한다. 그래서 netstat으로 하여 지금 쓰는 포트에 대한 규제가 있는지 확인하였다.

1) linux에서 규제 확인

netstat -ntlp | grep 3306

위와 같은 코드를 쳐서 확인해주었다.

2) mysql에서도 규제 확인

서버 변수에서도 확인이 가능하다. mysql에 들어가야 한다.

show variables like '%bind%';

show variables like '%bind%';
show variables like '%bind%';

위와 같이 치면 bind_address와 mysqlx_bind_address에 대한 값이 나온다. 이도 1번과 같이 2번도 127.0.0.1이 나온다면 이부분을 바꿔줘야 한다.

netstat을 쳤을 때 3306을 필터링 걸어보면, 127.0.0.1:33060과, 127.0.0.1:3306이 나온다. mysql은 기본적으로 3306포트를 이용한다. 여기서 127.0.0.1이라는 뜻은 local에서만 접속을 허용하고 이외의 외부 접속은 허용되지 않는다는 말이다. 그래서 이 부분을 0.0.0.0으로 바꿔주어야 한다.

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_bind_address

 

위 사이트는 mysql 사이트인데 bind_address에 관련하여 잘 나와 있다. bind_address는 서버 시작 시 시스템 변수를 설정하는 곳이라고 서술되어 있다. 또한 아래와 같이 0.0.0.0으로 바꿔줘야 하는 이유는 ipv4으로 연결을 수락하기 때문이다.

포트를 바꿔야 하는 이유
포트를 바꿔야 하는 이유

문제 해결

1) 파일 수정

cd /etc/mysql/mysql.conf.d
sudo vim mysqld.conf

나는 ubuntu를 사용하고 있는데, 이에는 /etc/mysql/mysql.conf.d 밑에 mysqld.conf파일이 존재한다.

이 파일을 수정하면 되는데, 이것도 수정의 권한이 안되어서 구글링해보았다. sudo로 들어가지 않아서 수정과 글쓰기가 안되었다.

sudo vim mysqld.cnf
sudo vim mysqld.cnf

반응형

수정 전
수정 전

이렇게 들어가야 수정이 가능하다. 그리고 아래와 같이 [mysqld]로 표시된 부분에서 bind-address를 찾아서 0.0.0.0으로 바꿔주면 된다.

수정 후
수정 후

2) mysql서버 재부팅

sudo service mysql restart
sudo service mysql status

수정한 파일에 적용될 수 있게 mysql서버를 재부팅해준다. ubuntu를 사용하고 있기에 centOs와 window와의 명령어가 다르므로 유의해야 한다. 아래에 링크를 걸어두었으니 참고하자.

https://zetawiki.com/wiki/리눅스_MySQL_시작,_정지,_재시작,_상태확인

 

제일 상위 파일로 파일 위치를 옮겨서 service명령어를 사용하여 재시작을 해주고, 잘 돌아가고 있는지 상태를 확인해준다.

mysql이 실행중인 것을 보여주는 화면
active이라면 mysql이 잘 돌아가고 있다면 실행중인 것이다.

3) 서버 변수 확인

다시 mysql에 접속한다. 그리고 bind_address의 값이 바꼈는지 확인하고, mysql에 서버가 연결되는지 확인한다.

해당 포트의 변화 모습
해당 포트의 변화

문제발생

또류다,,, 위의 문제를 찾으면서 봤던 오류라서 빠르게 처리할 수 있었다. 위의 오류와 덧붙여서 정리하고자 한다.

https://1mini2.tistory.com/88 이 사이트를 참고하였다.

uncaughtException: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

 

이 문제는 클라이언트 프로그램에서 mysql 패스워드 플러그인 "caching_sha2_password"을 소화하지 못해서 생기는 오류이다. 클라이언트 프로그램에서 사용할 수 있도록 유저의 패스워드 Plugin을 바꿔준다.

문제 해결

이 오류는 plugin만 바꿔주면 쉽게 해결된다. 아래의 사진은 plugin을 바꿔주기 전의 사진이다. 내 user는 uhee로 설정해놨다.

수정 전
수정 전

alter user 'id'@'%' identified with mysql_native_password by 'password';

이 코드를 작성하여 plugin을 바꿔주면 아래의 사진과 같이 변한다. mysql_native_password로 하여 해시방법을 바꿔준다.

수정 후
수정 후

반응형