본문 바로가기
Linux

MySQL/MariaDB - root 계정 초기화/비밀번호 재설정

by 올엠 2021. 1. 25.
반응형

오늘은 MiaraDB 작업중에 발생한 root 비밀번호 분실에 따른 재설정을 진행하였다.

이유는 정확히 모르지만, sudo mysql_secure_installation 작업 도중 root 비밀번호 변경에서 강제 중지를 하였더니 root 계정이 사라져 버렸다. 이를 해결 하기 위해서 인터넷의 정보를 확인했고 여기에 정리하는 차원으로 남긴다. 

방법은 MariaDB와 MySQL 모두 동일한 방식으로 사용이 가능하다.

아마 root 계정의 비밀번호를 분실했거나, 계정을 삭제한 상황이라면, 아래 방법이 유용하다. 처음에 찾은 글은 재설정하는 방법이였는데, 결과적으로 재설정이나 새로 root 계정을 생성하는 과정을 비슷하다고 할 수 있다.

 

1. MySQL/MariaDB   Safe Mode 시작

처음 진행할 부분은 Safe 모드를 시작하는 것이다. 이를 위해 현재 실행중인 MySQL/MariaDB 데몬을 중지하도록 하자.

sudo systemctl stop mysql

정상적으로 종료가되었다면, Safe 모드를 실행하는데, --skip-grant-tables 을 이용하여 권한 테이블을 제외하고, &를 통해 백그라운드로 실행하도록 하자.

sudo mysqld_safe --skip-grant-tables &

 

1. MySQL/MariaDB Shell 작업

이제 본격적인 계정 초기화 작업을 진행해보자.

먼저 shell 로그인을 진행한다.

mysql -u root

MariaDB [(none)]>  이렇게 쉘이 정상적으로 잘 나타난다면, 작업할 준비가 완료되었다.

먼저 계정 비밀번호 변경을 시도해보자. 아래 명령중 'NEW_PASSWORD' 부분에 원하는 패스워드로 변경하면 된다.

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NEW_PASSWORD');

정상적으로 명령이 실행이 되었다면, Qurey OK가 떨어진다.

버전에 따라(MySQL 5.7.6 / MariaDB 10.1.20 이후 버전) 다음 명령이 유용할 수 있으니 위 명령이 정상적으로 실행되지 않는다면, 다음 명령도 실행해 보자.

UPDATE mysql.user SET authentication_string = PASSWORD('NEW_PASSWORD') WHERE User = 'root' AND Host = 'localhost';

 

만약 OK가 떨어지지 않거나, 변경된 Rows이 없다면, root 계정의 비밀번호 변경이 되지 않은 것이다. 이럴때에는  root 계정을 삭제하고 새로 생성하도록 하자. 아래는 삭제후 새로 root 계정을 생성하는 명령이다.

DELETE FROM mysql.user 
WHERE  user = 'root' 
       AND host = 'localhost'; 

INSERT INTO mysql.user 
SET user = 'root', 
    host = 'localhost', 
    password = Password('NEW_PASSWORD'), 
    Select_priv = 'y',
    Insert_priv = 'y',
    Update_priv = 'y',
    Delete_priv = 'y',
    Create_priv = 'y',
    Drop_priv = 'y',
    Reload_priv = 'y',
    Shutdown_priv = 'y',
    Process_priv = 'y',
    File_priv = 'y',
    Grant_priv = 'y',
    References_priv = 'y',
    Index_priv = 'y',
    Alter_priv = 'y',
    Show_db_priv = 'y',
    Super_priv = 'y',
    Create_tmp_table_priv = 'y',
    Lock_tables_priv = 'y',
    Execute_priv = 'y',
    Repl_slave_priv = 'y',
    Repl_client_priv = 'y',
    Create_view_priv = 'y',
    Show_view_priv = 'y',
    Create_routine_priv = 'y',
    Alter_routine_priv = 'y',
    Create_user_priv = 'y',
    Event_priv = 'y',
    Trigger_priv = 'y',
    Create_tablespace_priv = 'y';

정상적으로 적용 된 경우 아래와 같이 row 적용에 성공했다는 메세지를 확인 할 수 있다.

 

이제 exit 를 통해 쉘을 빠져나온 후 현재 실행중인 MySQL safe 모드를 종료하도록 하자.

mysqladmin -u root -p shutdown

위 명령을 입력하면 root 비밀 번호를 물어보는데, 새로 생성한 비밀번호를 입력하면 된다.

 

그후 새로 생성한 비밀번호로 잘 접속되는지 mysql 명령을 통해 확인하고, 정상적으로 변경이 되었다면 systemctl을 통해 SQL 데몬을 실행하자.

mysql -u root -p

 

root 패스워드 문제를 해결하기 위해 인터넷 검색하면서 유용했던 글에 대해서 링크를 남기니 여기 정보로 부족한 부분은 아래 글을 참고하면 좋겠다.

https://linuxize.com/post/how-to-reset-a-mysql-root-password/

 

How to Reset the MySQL Root Password

Have you forgotten your MySQL root password? Don’t worry, it happens to all of us. In this post we will show you how to reset the MySQL root password

linuxize.com

https://stackoverflow.com/questions/6085455/restoring-deleted-root-user-and-password-for-mysql

 

Restoring deleted 'root' user and password for MySQL

I accidentally deleted the root user on my local dev setup of MAMP/MySQL running on OS X. There are no other users created to get back into MySQL. This is a mild nightmare can't seem to do anyth...

stackoverflow.com

 

반응형

'Linux' 카테고리의 다른 글

SaltStack - 2. Grains 그룹기반 관리  (0) 2021.03.12
SaltStack - 1. Basic Install and Join  (0) 2021.02.15
Linux - Disable IPv6  (0) 2021.01.20
How to Install Squid 3 on Ubuntu  (0) 2020.12.29
VSCODE - SSH 원격 연결 with pem for AWS  (0) 2020.12.04