행위

Mysql root 비번 분실시

DB CAFE

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 오류 발생시 조치 방법[편집]

2.1 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 에 생성 되는데 해당 에러는 mysql.sock 파일의 위치가 다른 경우 발생

2.2 해결방법[편집]

2.2.1 mysql.sock 파일위치 찾기[편집]

# ps -ef |grep mysql|grep .sock

2.2.2 mysql인 경우 socket 위치는 각자 다를수 있음.[편집]

# /usr/local/mysql/bin/mysql -u root -p mysql -S /var/lib/mysql/mysql.sock

2.2.3 maria db 인경우 socket 위치는 각자 다를수 있음.[편집]

# /usr/local/mariadb/bin/mysql -u root -p mysql  -S /var/run/mariadb10.sock

2.3 설정파일 변경 방법[편집]

  • /etc/my.cnf 파일 확인
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock

혹은

  • /etc/my.cnf.d/mysql-clients.cnf 파일 수정
[mysql]
socket = /tmp/mysql.sock

3 우분투 리눅스 (Ubuntu Linux) 에서 root password 분실시[편집]

record_voice_over

  • Ubuntu MySQL root password 재설정
  • MySQL 5.7 버전 기준


3.1 Ubuntu에서 MySQL의 root 비밀번호를 분실, 재설정, 초기화[편집]

1) 먼저 MySQL 서비스 종료

$ sudo service mysql stop

2) 인증 생략 옵션을 추가하여 안전모드로 MySQL 데몬 실행

$ sudo /usr/bin/mysqld_safe --skip-grant-tables &


  • 실행 시 아래와 같은 문제가 발생하는 경우 ('/var/run/mysqld' for UNIX socket file don't exists)
2023-08-16T14:24:28.869193Z mysqld_safe Logging to syslog.
2023-08-16T14:24:28.872779Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2023-08-16T14:24:28.876599Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
  • /var/run/mysqld 경로가 존재하는지 확인 하고 없다면 생성 후 권한 설정
$ sudo mkdir -p /var/run/mysqld
$ sudo chown -R mysql:mysql /var/run/mysqld

3) 다시 MySQL 데몬을 실행

/usr/bin/mysqld_safe --skip-grant-tables &

4) 데몬이 정상적으로 실행되었으면 MySQL 접속

$ mysql -u root mysql

5) root 계정의 새로운 패스워드를 설정

mysql> UPDATE mysql.user SET authentication_string=PASSWORD('새로운 패스워드') WHERE user='root';

mysql> flush privileges;

mysql> exit;

6) MySQL 종료 후 재시작

sudo service mysql restart
  • 정상적으로 실행되지 않는 다면 Mysql 데몬 프로세스 Kill 한 후 Mysql 시작
$ sudo ps -ef |grep mysql

root      4093  2085  0 23:24 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables
mysql     4453  4093  0 23:24 pts/1    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

$ sudo kill -9 4453

$ sudo systemctl start mysql