행위

Mysql root 비번 분실시

DB CAFE

Dbcafe (토론 | 기여)님의 2023년 5월 2일 (화) 16:04 판 (Can't connect to local MySQL server through socket '/tmp/mysql.sock' 오류 발생시)
thumb_up 추천메뉴 바로가기


1 MYSQL root패스워드를 잊어버렸을 때 복구하는 방법[편집]

android * mysqld_safe 명령으로 --skip-grant-table옵션을 사용하여 MYSQL의 사용자인증과정을 생략하여 실행한 후 MYSQL의 root계정으로 패스워드없이 접속하여 원하는 패스워드로 변경하는 방법

  • MYSQL의 root계정 패스워드를 잊어버렸을 경우의 복구절차는 다음과 같다.
  1. 단계 : 실행중인 Mysql데몬(mysqld) 및 MYSQL프로세스 종료
  2. 단계 : ./mysqld_safe --skip-grant-table 을 실행하여 MYSQL 실행
  3. 단계 : 패스워드없이 MYSQL root계정으로 MYSQL에 접속.
  4. 단계 : update문으로 MYSQL root사용자의 패스워드 변경.
  5. 단계 : flush privileges 명령어로 변경된 MYSQL 권한테이블(db, user테이블들)들에 변경된 권한설정들을 적용.
  6. 단계 : MYSQL 접속 화면 종료후 Mysql데몬(mysqld) 종료 및 재실행
  7. 단계 : mysql -u root -p변경된패스워드 로 접속


1.1 단계 : 실행중인 Mysql데몬(mysqld) 및 Mysql프로세스 종료[편집]

  • 현재 실행되어있는 MYSQL의 root패스워드를 잊어버렸기 때문에 실행된 실행중인 MYSQL을 종료해야 함.
  • root패스워드를 잊어버리지 않은 경우라면 mysqladmin을 이용해서 MYSQL을 종료할 수 있지만 현재상태에서는 MYSQL의 root패스워드를 모르는 상황이므로 killall명령어를 이용하여 종료.
-- 프로세스 찾기 
# ps -ef| grep mysqld
-- 프로세스 전체 종료 
-- linux인 경우 
# killall mysqld
  • root패스워드를 알고 있다면 실행중인 MYSQL을 종료하는 정상적인 방법은 "mysqladmin -u root -p shutdown"을 이용
  • 하지만 root패스워드를 알지 못하는 현재 상황에서는 부득이하게 killall을 이용하여 MYSQL 종료

1.2 단계 : table grant권한없이 MYSQL 실행[편집]

  • --skip-grant-table 옵션을 줘서 MYSQL 을 실행하면 패스워드없이 MYSQL 로 바로 접속 가능
  • 이 옵션으로 실행하면 다음과 같은 작업들이 가능.
  1. 패스워드를 지정하는 -p옵션없이 접속.
  2. 어떤 패스워드를 입력하더라도 조건없이 바로 접속.
  3. -p옵션을 지정해도 되고 지정하지 않아도 된다.
  • "mysqld_safe --skip-grant-table &" 명령 실행
# /usr/local/mysql/bin/mysqld_safe --skip-grant-table &
  • mysql 프로세스 확인
# ps -ef | grep mysqld

1.3 단계 : 패스워드없이 MYSQL root계정으로 MYSQL 접속[편집]

# /usr/local/mysql/bin/mysql -u root mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.32 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

1.4 단계 : update문으로 MYSQL root사용자의 패스워드 변경[편집]

mysql> update user set password=password('11111111') where user='root';

Query OK, 0 rows affected (0.01 sec)
Rows matched: 3  Changed: 0  Warnings: 0
mysql>

1.5 단계 : "flush privileges"으로 MYSQL 권한 갱신[편집]

  • MYSQL의 권한테이블들(db, user테이블들)에 적용되도록하기 위한 것
mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)
mysql>

1.6 단계 : MYSQL 접속 화면 종료 후 mysqld 데몬 종료 후 재 실행[편집]

  • MYSQL 접속 화면 종료
mysql> exit
Bye
  • mysqld 데몬 종료 후 재 실행
-- linux인 경우 
# killall mysqld
  • mysqld 데몬 재 실행
# /usr/local/mysql/bin/mysqld_safe &

1.7 단계 : mysql -u root -p변경된패스워드 로 접속[편집]

# /usr/local/mysql/bin/mysql -u root -p mysql

2 Can't connect to local MySQL server through socket '/tmp/mysql.sock' 오류 발생시[편집]

  • 다음과 같은 오류를 출력하며 데이터베이스에 접속하지 못하는 경우
# /usr/local/mysql/bin/mysql -u root -p user_db
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  • 이 에러의 원인은 MYSQL의 소켓 파일인 mysql.sock 파일이 없거나 정확하지 않아서 발생하는 에러입니다.
  • MYSQL이 실행되면 MYSQL 소켓 파일이 /tmp/ 디렉토리에 다음과 같이 생성되게 되는데 해당 에러는 mysql.sock 파일의 위치가 다른 경우입니다.
    이 경우 다음과 같이 조치합니다.
# /usr/local/mysql/bin/mysql -u root -p mysql -S /var/lib/mysql/mysql.sock
Enter password : *******
... 생략 ...
mysql >