MariaDB root 비밀번호 분실 시 재설정 방법 (Linux / Windows)
MariaDB root 비밀번호를 잊어버렸다면 당황할 필요 없습니다. 서버를 권한 검사 없이(--skip-grant-tables) 잠시 실행한 뒤 비밀번호를 새로 지정하고, 다시 정상 모드로 재시작하면 됩니다.
이 글에서는 Linux와 Windows 두 환경 모두에서의 방법을 정리합니다.
⚠️ 주의
--skip-grant-tables상태에서는 누구나 비밀번호 없이 모든 권한으로 접속할 수 있습니다. 작업은 빠르게 끝내고, 외부 접속은 반드시 차단한 상태에서 진행하세요. 운영 서버라면 서비스 점검 시간에 작업하는 것을 권장합니다.
목차
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을 파일로 만들어 서버 시작 시 실행시키는 방법도 있습니다.
-
C:\reset.sql파일을 만들고 다음 내용을 저장합니다.ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호'; -
서비스를 중지한 상태에서 실행합니다.
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 -
서버가 정상적으로 뜨면
Ctrl + C로 종료하고net start MariaDB로 서비스를 시작합니다. -
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';
마무리
정리하면 순서는 항상 같습니다.
- 서비스 중지
--skip-grant-tables(또는--init-file)로 서버 실행FLUSH PRIVILEGES→ALTER USER로 비밀번호 변경- 정상 모드로 재시작
- 새 비밀번호로 접속 확인
작업이 끝나면 인증 없이 열린 상태가 남아 있지 않은지 꼭 한 번 더 확인하세요.