MySQL root password 분실 시 재설정 방법

한승재 (Conor)·2023년 12월 28일

Server(BE) Engineering

목록 보기
1/1

오랜만에 AWS RDS를 사용하지 않고 터미널에서 mysql을 사용하려던 중 password를 까먹어서 재설정을 해야하는 상황이 생겼다.

mysql -u root -p

일단 MySQL 서버를 정지했다.

sudo mysqld_safe --skip-grant-tables

위 명령을 실행하여 MySQL을 권한없이 실행한 후에 새로운 터미널을 열어서 다음 명령어를 실행한다.

mysql -u root

를 실행하면 password 없이 MySQL에 접속할 수 있다고 검색 결과로 많이 나와있었는데 나는 잘되지 않았다.
따라서 내가 해결했던 방법을 적으려고한다.

mac 기준 homebrew로 mysql을 설치했기 때문에 homebrew 기준으로 password 재설정하는 법을 작성하겠다.

MySQL 전체 초기화, 완전삭제

  1. MySQL 프로세스 Stop 하기
brew services stop mysql

2.MySQL 데이터 디렉토리 제거
MySQL 데이터 파일 확인

which mysql

/opt/homebrew/bin/mysql 또는 /usr/local/var/mysql 에 위치한다.

sudo rm -rf /usr/local/var/mysql
sudo rm -rf /opt/homebrew/bin/mysql
brew uninstall --force mysql

나는 MySQL을 초기화시키고 관련 모든 파일과 경로를 삭제하는 방법을 사용했다.

  1. 모두 제거를 했다면 PC를 재부팅한다. 그 후 homebrew로 MySQL 재설치
brew install mysql
  1. MySQL 서비스 재시작
brew services restart mysql
  1. 비밀번호 없이 root 로그인
mysql -uroot

가장 힘들게했던 오류코드 1

서비스를 재시작하거나 mysql 접속을 시도할 시에 이런 에러가 나올 수 있다.

ERROR 2002 (HY000): Can't connect to local server through socket '/tmp/mysql.sock' (2)
이 오류는 MySQL 클라이언트가 지정된 소켓 경로에서 MySQL 서버에 연결하지 못했을 때 발생한다.

mysql.sock 파일이 어떤 경로에 있는지 확인해야한다.

mysql_config --socket

/tmp/mysql.sock

가장 힘들게했던 오류코드 2

MySQL 서버 PID 파일을 찾을 수 없는 에러는 MySQL이 실행 중이지 않거나 PID 파일의 위치를 찾을 수 없을 때 발생한다.

ERROR! The server quit without updating PID file (/usr/local/var/mysql/사용자컴퓨터이름.pid)

서버의 상태를 확인한다.

brew services list

만약 stopped로 되어있다면 서버를 재시작해야한다.

brew services start mysql

(분명 여기서 가장 힘들게 했던 오류코드 1이 나올 가능성이 크다.)

오류코드 1 해결 후 서버가 시작되면 아래와 같은 파일을 찾아 삭제해준다.

MySQL 설정파일 위치 찾기

mysql --verbose --help | grep my.cnf

/etc/my.cnf /etc/mysql/my.cnf /opt/homebrew/etc/my.cnf ~/.my.cnf 

모두 삭제해주기

sudo rm -rf /etc/my.cnf
rm -rf /usr/local/etc/my.cnf
rm -rf /usr/local/var/mysql
sudo rm -rf /usr/local/mysql*

그리고 3번 과정으로 돌아가서 진행을 한다.

mysql에 정상적으로 접속을 했다면, 비밀번호를 재설정해줘야한다.

 UPDATE mysql.user SET authentication_string=password('새로운비밀번호') WHERE user='root' AND Host = 'localhost';
 
 FLUSH PRIVILEGES;

MySQL 8.0 버전 이상에서는 password() 함수가 사라지고, 대신 mysql_native_password로 비밀번호를 설정하는 방법이 변경되었다고한다.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY <'새로 설정할 password'>;

Query OK, 0 rows affected (0.01 sec)

mysql> 

다시는 password를 분실하지 않아야겠다고 다짐 또 다짐했다.

요약

  1. MySQL 전체 초기화(완전삭제)
    중요 : 모든 경로, 파일들 삭제해줘야함

  2. MySQL 재설치

  3. MySQL 시작 및 접속

  4. 비밀번호 설정

  5. 접속확인

0개의 댓글