MariaDB root 비밀번호 분실 시 재설정 방법 (Linux / Windows)

By | 2026년 10월 28일
Table of Contents

MariaDB root 비밀번호 분실 시 재설정 방법 (Linux / Windows)

MariaDB root 비밀번호를 잊어버렸다면 당황할 필요 없습니다. 서버를 권한 검사 없이(--skip-grant-tables) 잠시 실행한 뒤 비밀번호를 새로 지정하고, 다시 정상 모드로 재시작하면 됩니다.

이 글에서는 Linux와 Windows 두 환경 모두에서의 방법을 정리합니다.

⚠️ 주의
--skip-grant-tables 상태에서는 누구나 비밀번호 없이 모든 권한으로 접속할 수 있습니다. 작업은 빠르게 끝내고, 외부 접속은 반드시 차단한 상태에서 진행하세요. 운영 서버라면 서비스 점검 시간에 작업하는 것을 권장합니다.


목차

  1. 먼저 확인할 것: 비밀번호 없이 접속되는지
  2. Linux에서 재설정하기
  3. Windows에서 재설정하기
  4. 버전별 비밀번호 변경 SQL 정리
  5. 자주 겪는 문제

1. 먼저 확인할 것: 비밀번호 없이 접속되는지

Debian, Ubuntu 등 일부 배포판에 설치된 MariaDB 10.4 이상은 root 계정이 기본적으로 unix_socket 인증을 사용합니다. 이 경우 OS의 root(sudo) 권한만 있으면 비밀번호 없이 접속됩니다.

sudo mariadb
# 또는
sudo mysql

접속이 된다면 서버를 재시작할 필요 없이 바로 비밀번호만 바꾸면 됩니다.

ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호';
FLUSH PRIVILEGES;

접속이 안 된다면 아래 절차를 따라 주세요.


2. Linux에서 재설정하기

예시는 systemd를 사용하는 배포판(Ubuntu, Debian, Rocky Linux, CentOS 7+ 등) 기준입니다. 서비스 이름이 mariadb가 아니라 mysql인 경우도 있으니 환경에 맞게 바꿔 주세요.

2-1. MariaDB 서비스 중지

sudo systemctl stop mariadb

중지되었는지 확인합니다.

sudo systemctl status mariadb

2-2. 권한 검사 없이 서버 실행

두 가지 방법 중 하나를 선택합니다.

방법 A. mysqld_safe 사용

sudo mysqld_safe --skip-grant-tables --skip-networking &

방법 B. systemd 환경변수 사용 (mysqld_safe가 없는 경우)

sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
sudo systemctl start mariadb
  • --skip-grant-tables: 권한 테이블을 읽지 않아 비밀번호 없이 접속 가능
  • --skip-networking: TCP 접속을 막아 외부에서 접속하지 못하게 함 (로컬 소켓으로만 접속)

2-3. 비밀번호 없이 접속

mysql -u root

2-4. 비밀번호 변경

--skip-grant-tables 상태에서는 권한 테이블이 로드되지 않았기 때문에, 먼저 FLUSH PRIVILEGES를 실행해야 ALTER USER가 동작합니다.

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호';
FLUSH PRIVILEGES;
EXIT;

MariaDB 10.3 이하이거나 위 명령이 실패한다면 4. 버전별 비밀번호 변경 SQL 정리를 참고하세요.

2-5. 정상 모드로 재시작

방법 A(mysqld_safe)로 실행한 경우

sudo mysqladmin -u root -p shutdown
# 또는 위 명령이 안 되면
sudo pkill mysqld

sudo systemctl start mariadb

방법 B(systemd 환경변수)로 실행한 경우

sudo systemctl stop mariadb
sudo systemctl unset-environment MYSQLD_OPTS
sudo systemctl start mariadb

⚠️ unset-environment를 빼먹으면 다음 재시작 때도 인증 없이 열린 상태로 실행됩니다. 반드시 해제하세요.

2-6. 새 비밀번호로 접속 확인

mysql -u root -p

3. Windows에서 재설정하기

예시 경로는 C:\Program Files\MariaDB 11.4\ 입니다. 설치한 버전에 맞게 경로를 바꿔 주세요. 모든 명령은 관리자 권한 명령 프롬프트(cmd) 에서 실행합니다.

3-1. MariaDB 서비스 중지

net stop MariaDB

서비스 이름이 다를 수 있습니다(MySQL, MariaDB114 등). 이름을 모르면 다음 명령으로 확인하세요.

sc query state= all | findstr /i "maria mysql"

또는 Win + R → services.msc에서 MariaDB 서비스를 찾아 중지해도 됩니다.

3-2. 권한 검사 없이 서버 실행

MariaDB의 bin 폴더로 이동한 뒤, 설정 파일(my.ini)을 지정해서 실행합니다. Windows 설치본은 보통 data 폴더 안에 my.ini가 있습니다.

cd "C:\Program Files\MariaDB 11.4\bin"

mysqld --defaults-file="C:\Program Files\MariaDB 11.4\data\my.ini" --skip-grant-tables --bind-address=127.0.0.1 --console
  • --defaults-file: 데이터 디렉터리 경로 등 기존 설정을 그대로 쓰기 위해 지정합니다. 반드시 첫 번째 옵션으로 써야 합니다.
  • --bind-address=127.0.0.1: 로컬에서만 접속 가능하도록 제한합니다.
  • --console: 로그를 창에 출력합니다. 이 창은 닫지 말고 그대로 두세요.

💡 Linux처럼 --skip-networking을 쓰면 Windows에서는 TCP 접속이 막혀 클라이언트가 접속하지 못할 수 있습니다. 그래서 대신 --bind-address=127.0.0.1로 로컬 접속만 허용합니다.

3-3. 비밀번호 없이 접속

새 관리자 명령 프롬프트를 하나 더 열고 접속합니다.

cd "C:\Program Files\MariaDB 11.4\bin"
mysql -u root -h 127.0.0.1

3-4. 비밀번호 변경

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호';
FLUSH PRIVILEGES;
EXIT;

3-5. 정상 모드로 재시작

--console로 띄운 서버를 종료합니다.

mysqladmin -u root -p -h 127.0.0.1 shutdown

(또는 서버를 띄운 첫 번째 창에서 Ctrl + C)

그다음 서비스를 다시 시작합니다.

net start MariaDB

3-6. 새 비밀번호로 접속 확인

mysql -u root -p

(대안) --init-file로 한 번에 처리하기

명령 프롬프트 두 개를 오가기 번거롭다면, 비밀번호 변경 SQL을 파일로 만들어 서버 시작 시 실행시키는 방법도 있습니다.

  1. C:\reset.sql 파일을 만들고 다음 내용을 저장합니다.

    ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호';
  2. 서비스를 중지한 상태에서 실행합니다.

    cd "C:\Program Files\MariaDB 11.4\bin"
    mysqld --defaults-file="C:\Program Files\MariaDB 11.4\data\my.ini" --init-file=C:\\reset.sql --console
  3. 서버가 정상적으로 뜨면 Ctrl + C로 종료하고 net start MariaDB로 서비스를 시작합니다.

  4. C:\reset.sql 파일은 반드시 삭제합니다. (비밀번호가 평문으로 들어 있습니다.)

이 방법은 --skip-grant-tables를 쓰지 않으므로 인증 없이 열리는 시간이 없다는 장점이 있습니다. Linux에서도 같은 방식으로 사용할 수 있습니다.


4. 버전별 비밀번호 변경 SQL 정리

MariaDB 버전 권장 명령
10.4 이상 ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호';
10.2 ~ 10.3 ALTER USER 또는 SET PASSWORD
10.1 이하 SET PASSWORD 또는 UPDATE mysql.user

SET PASSWORD 방식

FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('새비밀번호');
FLUSH PRIVILEGES;

UPDATE 방식 (구버전)

UPDATE mysql.user SET password = PASSWORD('새비밀번호') WHERE User = 'root';
FLUSH PRIVILEGES;

MariaDB 10.4부터 mysql.user는 뷰(view)로 바뀌어 UPDATE로 직접 수정할 수 없습니다. 10.4 이상에서는 ALTER USER를 사용하세요.

소켓 인증과 비밀번호 인증을 모두 허용하기 (10.4 이상, Linux)

sudo mariadb로 비밀번호 없이 접속하는 방식도 유지하고 싶다면 다음처럼 설정합니다.

ALTER USER 'root'@'localhost'
  IDENTIFIED VIA mysql_native_password USING PASSWORD('새비밀번호')
  OR unix_socket;

현재 버전은 다음 명령으로 확인할 수 있습니다.

mysql --version

5. 자주 겪는 문제

ERROR 1290: The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
→ ALTER USER 전에 FLUSH PRIVILEGES;를 먼저 실행하세요.

Can't connect to local MySQL server through socket (Linux)
→ 서버가 아직 완전히 올라오지 않았거나, 소켓 디렉터리(/run/mysqld)가 없을 수 있습니다.

sudo mkdir -p /run/mysqld
sudo chown mysql:mysql /run/mysqld

Can't connect to MySQL server on 'localhost' (Windows)
→ -h 127.0.0.1 옵션을 붙여 접속하고, --skip-networking을 쓰지 않았는지 확인하세요.

서비스가 시작되지 않음 (Windows)
→ --console로 띄운 mysqld가 아직 실행 중일 수 있습니다. 작업 관리자에서 mysqld.exe가 남아 있는지 확인하고 종료한 뒤 다시 시작하세요.

root@'localhost' 계정이 없다고 나옴
→ 호스트 값이 다를 수 있습니다. 실제 계정을 확인한 뒤 해당 호스트로 변경하세요.

SELECT User, Host FROM mysql.user WHERE User = 'root';

마무리

정리하면 순서는 항상 같습니다.

  1. 서비스 중지
  2. --skip-grant-tables(또는 --init-file)로 서버 실행
  3. FLUSH PRIVILEGES → ALTER USER로 비밀번호 변경
  4. 정상 모드로 재시작
  5. 새 비밀번호로 접속 확인

작업이 끝나면 인증 없이 열린 상태가 남아 있지 않은지 꼭 한 번 더 확인하세요.

답글 남기기