개발 이야기/MySQL

[MySQL 오류 해결] MySQL 접속 안되는 오류 해결

Kim Jun Hyeong 2024. 10. 17. 00:07

졸업작품에서 사용하던 MySQL에 접속 했는데 오류가 뜨면서 접속이 안됐다. 구글에 검색해서 해결 할려고 하였지만 예상하지 못한 다양한 오류들이 떴다. 여러번 삽질 끝에 겨우 MySQL에 다시 접속 하는데 성공했다.

# 사용 환경

  • OS : mac m1 15.0.1
  • MySQL 버전 : 9.0.1
  • MySQL 경로 : /opt/homebrew/bin/mysql

먼저 내가 사용하고 있는 환경이다.

# 오류 1

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

맨 처음에 떴던 오류이다. /tmp/mysql.sock를 찾을 수 없다고 오류가 뜬다. /tmp 폴더를 가서 확인 해보니 mysql.sock 파일이 잘 있었다. 그래서 그냥 아얘 깔끔하게 삭제하고 다시 설치 하기로 했다.

# MySQL 삭제하기

1. MySql 서버 중지하기

brew services stop mysql

2. Homebrew를 통해 mysql 제거

brew uninstall mysql

3. MySql 디렉토리를 삭제

!!! 이 방법은 MySql의 모든 데이터가 삭제된다! 백업 잘 해두시길 !!!

sudo rm -rf /opt/homebrew/var/mysql

4. mysql 설정 파일 삭제

sudo rm /opt/homebrew/etc/my.cnf

 

5. 환경 변수 확인 및 제거

환경 변수에서 MySQL 관련 변수를 확인하고 필요한 경우 제거합니다.
~/.bash_profile, ~/.zshrc, 또는 다른 쉘 설정 파일을 확인하여 MySQL과 관련된 PATH 또는 환경 변수를 찾아 제거합니다.

저 같은 경우에는 환경 변수에 아무 내용이 없어서 그냥 넘어갔습니다.

6. Homebrew에서 mysql과 관련된 패키지 파일 삭제

brew list | grep mysql

다시 재설치 후

brew services start mysql
mysql -u root -p

mysql 서버 시작 후 MySQL 클라이언트에 접속하기

mysql.sock 파일은 없으면 MySQL 서버가 다시 시작될때 새로운 소켓 파일을 생성한다.

 


# 오류 2

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

제일 마지막에 떴던 오류다. root에 비밀번호가 설정되어있지 않거나 비밀번호가 틀려서 오류가 발생하는 것 같다

그러면 비밀번호가 설정되어 있지 않다면 엔터를 치고 접속을 하고 만약 그래도 접속이 안된다면

1. MySQL 서버를 중지하기

brew services stop mysql

2. MySQL 서버를 승인을 생략하는 옵션을 추가하여 시작한다.

승인을 생략하는 이유는 비밀번호 없이 MySQL에 접속하기 위해서이다.

mysql.server start --skip-grant-tables

 

3. MySQL에 접속하기

mysql -u root

4. MySQL 데이터베이스를 사용한다.

USE mysql;

5. 비밀번호 테이블을 조회하기

SELECT authentication_string FROM user;

확인을 해보니 처음엔 두가지 문제점이 있었다.

첫번째는 비밀번호가 저장이 안되어있었다.
두번째는 설정한 비밀번호가 해쉬화 되지않고 그대로 저장되어 있었다. 내 예상으로는 해쉬화가 되지 않아서 비밀번호가 틀렸다고 생각되었다. 그래서 비밀번호를 변경을 하여 해결 하였다.

6. root 유저 비밀번호를 NULL로 변경한다.

비밀번호를 NULL로 변경하는 이유는 MySQL 서버를 승인 생략 옵션 없이 정상적으로 다시 실행했을 때 비밀번호 없이 바로 접속하기 위해 NULL로 변경했다. 그리고 비밀번호를 설정하면 해쉬화를 하지 않으므로 오류가 뜬다. 또한 승인 생략 옵션을 통해 MySQL을 실행하면 ALTER 명령어를 사용하면 사용할 수 없는 명령어라는 오류가 발생해 비밀번호를 변경할 수 없다.

UPDATE user SET authentication_string=null WHERE User='root';

7.  MySQL의 캐쉬를 지우고 새로운 설정을 적용

FLUSH PRIVILEGES;

8. MySQL을 종료한다.

EXIT

9. MySQL에 다시 접속한다.

비밀번호가 null로 설정되어 있으므로 두개 명렁어 중에서 아무거나 사용하여 접속할 수 있다.

mysql -u root
mysql -u root -p

10.  MySQL 데이터베이스를 사용한다.

USE mysql;

11. 사용자의 비밀번호를 변경한다.

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'rootroot';

12. MySQL의 mysql 데이터베이스에 있는 user 테이블에서 사용자 계정의 암호 해시 값을 조회하기

SELECT authentication_string FROM user;

MySQL의 mysql 데이터베이스에 있는 user 테이블에서 사용자 계정의 암호 해시 값을 조회

비밀번호를 변경하고 mysql 데이터베이스에 있는 user 테이블에서 사용자 계정의 암호을 조회하면 정상적으로 해쉬화해서 저장이 된다.

그러고 MySQL을 종료하고 다시 변경된 비밀번호를 입력하고 MySQL에 접속하면 연결이 잘 되는것을 확인 할 수 있다.