[Error] mysql연결시 나는 오류 해결하기
나중에 정리해놓고 글을 보았을 때 유용하게 쓰일 것 같아 정리해보고자 한다.
문제 발생
이러한 오류가 뜨면서 db를 작업하는 tableplus에서는 드라이버가 어떠한 패킷에 대한 응답을 받지 않았다고 하여 에러가 발생하였다고 적혀있었다.
이 문제 발생시 방화벽에 대한 규제는 풀어주었기에 방화벽에 대한 에러는 아니었다. 또한 mysql의 경우 tcp/ip나 socket을 사용하여 mysql과 연결하는데, 내 경우 socket을 사용치 않으므로 tcp/ip를 사용한다. 그래서 netstat으로 하여 지금 쓰는 포트에 대한 규제가 있는지 확인하였다.
1) linux에서 규제 확인
netstat -ntlp | grep 3306
위와 같은 코드를 쳐서 확인해주었다.
2) mysql에서도 규제 확인
서버 변수에서도 확인이 가능하다. mysql에 들어가야 한다.
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로 들어가지 않아서 수정과 글쓰기가 안되었다.
이렇게 들어가야 수정이 가능하다. 그리고 아래와 같이 [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명령어를 사용하여 재시작을 해주고, 잘 돌아가고 있는지 상태를 확인해준다.
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로 하여 해시방법을 바꿔준다.