[Database] Workbench 연결 오류 - Failed to Connect to MySQL at MySQL / Unable to connect 해결

sookyoung.k·2024년 10월 1일
1

🌿 교보DTS TIL

목록 보기
8/39
post-thumbnail

MySQL은 써봤으니까!!!! 당당하게 실습에 들어갔던 것 치고는 연결 안돼서 노트북 부술 뻔 했다. 휴... 수업 더 못 다닐뻔...

나중에도 자주 문제가 생길 것 같으니 그래도 몇몇 기억나는 것들은 적어두고 까먹지 않게 노력해보려고 한다!

🚨 문제 상황

Hostname도, Username도, Password도... 무엇 하나 빠지는 것 없이 잘 작성해줬건만 Test Connection에서 이런 오류 발생 ㅠㅠ

대체 왜!!!!!!!!!!!!!!!

어찌어찌 겨우겨우 해결했지만, 다시 한 번 테스트 해보면서 문제 원인이 뭐였는지 알고 가는 것이 좋을 것 같아 아까 배웠던 내용을 다시 진행해봤다.

Oracle VM으로 Virtual Box를 하나 틀어놓고, Linux 환경에서 진행했다.


🐬 MySQL 설치

# 패키지 업데이트
sudo apt update
# MySQL 서버 설치
sudo apt install mysql-server
# 서버가 정상적으로 실행 중인지 확인
sudo systemctl status mysql

우선 이런 과정으로 설치를 해준다. 그리고... 우리가 작업을 편하게 하기 위해서 Workbench를 설치하고 거기에서 작업을 해줄건데... 그럼 MySQL 서버와 Workbench를 연결해줘야 한다. 그런데 이 연결에서 미친 돌고래 자식이 자꾸 에러를 뱉어내는 것... (사실 컴퓨터는 죄가 없음. 내가 잘못한 거임. 유죄인간...)

🌐 외부 접속 허용

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

외부 접속을 허용하기 위해서는 설정 파일을 수정해야 한다.
이제는 익숙한 텍스트 편집기를 통해서 설정 파일을 수정해준다.

설정 파일에서 bind-address 항목을 찾아서

# bind-address = 127.0.0.1 // 변경 전
bind-address = 0.0.0.0

이렇게 변경해주면 된다.

sudo systemctl restart mysql
그리고 서비스 다시 시작!

하지만 난 안됐음... 대체 왜 그래서 여러 가지 방법들을 시도해봤다.

1. ufw 혹은 iptables 같은 방화벽 끄기

방화벽을 열어줄 수도 있겟지만 걍 난 껐다...

sudo systemctl stop ufw		// 방화벽 멈추기 
sudo systemctl status ufw	// 방화벽 꺼졌는지 확인 

아니면 방화벽에서 mysql 포트 번호에 해당하는 3306을 열어주면 된다. 보안 개나 준 개발자... 간지나는듯...

2. 설정 파일 확인

mysql 설치 시 이런 화면이 뜨는 경우가 있다.

찾아보니까... 이건 시스템 내부에 이미 MySQL의 이전 버전이 설치되어있을 경우에 던지는 질문이라고 한다. 기존 설정을 유지할 것인지, 아니면 새로운 버전의 기본 설정으로 초기화할지를 선택할 수 있도록 질문하는 것이라고 하는데... 과연 이것이 문제였을지...?

  1. 패키지 관리자 버전으로 설치했을 때의 설정 파일

* port 주석 처리되어 있으니 꼭 주석 풀어주기 안그러면 연결 안됨 (저도 알고싶지 않았어요)

  1. 기본값으로 설치했을 때의 설정 파일

처음에... 다른 설정들이 없어서 연결이 안되나... 하고 삭제 후 재설치를 했었는데... 굳이 1과 같은 화면이 나오지 않아도 이 상태에서 bind-adddress 추가해서 연결 테스트를 해보니

걍 너무 잘 연결됐다...^^ 아깐 대체 왜...? 암튼 다른 설정들은... 연결에 큰 문제가 되지 않는다.

결론적으로 설정 파일에서 확인해야 하는 부분은 설정 파일의 portbind-address 부분!

3. mysql 삭제 후 재설치

위의 설정 파일이 문제가 아니라는 것을 알았으니 굳이 삭제 후 재설치를 할 필요는 없지만, 그냥 한 번 써놓고 가려고 한다. 언젠간 mysql자체에서 문제가 발생해 삭제 후 재설치를 해야 하는 일이 발생할 수 있으니 ㅎㅎ... mysql은 그냥 삭제 명령어로는 깔끔히 삭제가 안되고 뭔가 엄청 깔끔하게 세상에 존재하지 않던 것처럼 완벽히 삭제를 해야 한다.

# purge 명령어로 완전 삭제의 첫 걸음
sudo apt-get remove --purge mysql*
# mysql 관련 파일 리스트 확인 
dpkg -l | grep mysql
# 확인 후 mysql 관련 파일 삭제
sudo apt-get remove --purge [파일명]
# 그 밖의 모든 것들 청소
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove mysql
sudo apt-get autoclean mysql 

기억 상 대충 이렇게 다 삭제를 해줬다.

MySQL 완전 삭제(Ubuntu/Debian)이 블로그를 참고했다.

관련 명령어들을 열심히 공부해둬야겠다... purge 명령어랑 autoremove 명령어는 완전삭제 시 자주 쓰이는 명령어같다. 공부... 하자... (언젠가)

🐳 MySQL 서버 로그인

🔱 로그인

삭제 후 재설치를 하든, 뭘 하든... mysql-server를 깔았다면! 일단 로그인을 해준다.

sudo mysql -u root -p

비밀번호를 입력하라는 창이 뜬다. 하지만? 우린 처음 로그인을 했는걸? 무시하고 엔터치면 바로 로그인이 된다.

🔱 사용자 생성 후 권한 부여

# 유저 생성
CREATE USER '[원하는유저명입력]'@'%' IDENTIFIED BY '[비밀번호]';
# 권한 부여
GRANT ALL PRIVILEGES ON *.* TO '[유저명]'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

위의 명령어를 입력하면 된다.

💥 %localhost 주의!

설정 파일이 문제가 아니였으므로 아무래도 문제는 유저를 생성하는 명령어에 있었던 것 같다. 처음에는 유저를 생성할 때

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'

이런 식으로 작성을 했었다.

  • localhost를 쓸 경우 - 로컬 호스트에서만 접속이 가능하다.
  • %를 쓸 경우 - 외부 접근을 허용한다.

때문에 연결 테스트에서 문제가 생긴다면

유저 목록을 확인 후 host 부분을 살펴보도록 하자! 여기에 문제가 있다면 유저를 삭제한 후 다시 만들어준다.

#유저리스트 조회
SELECT user, host FROM user;
# 유저 삭제
DROP USER 'myuser'@'localhost';

🐋 워크벤치와 연결

설치는 했다 치고,

워크벤치에 들어가서 빨간색으로 체크된 부분을 모두 채워준다.

Connection Name은 그냥 연결 이름을 원하는대로 작성하면 된다.
Hostname은 자신의 ip 주소를 입력하면 된다. (linux 환경에서 ifconfig로 ip주소를 확인하면 된다.)
Username에는 내가 아까 권한을 부여한 유저 이름을 적어주고
Password도 내가 정한 패스워드를 입력한다.

그리고 Test Connection 눌러서 연결이 잘 되나 확인하면 끝!!

이런 화면이 뜨면 성공... 흑흑.

아무래도 아까 내 문제 원인은 유저 생성 시 외부 접속 허용을 안 해뒀던 것, 그리고 무수한 오타 문제로 해결하고도 뭐가 문제였는지 몰라 헤맸던 것 같다.

세상에 연결 테스트가 이렇게 어려울 줄이야. 하지만 이건 어려운게 맞다!!!!! 기 죽zㅣ 말자. 파이팅파이팅.


본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다

profile
영차영차 😎

0개의 댓글