MySQL 또는 MariaDB를 사용하다 보면 가끔 관리자(root) 비밀번호를 잊어버리는 일이 생깁니다. 특히 서버 세팅 후 시간이 지나면 자주 접속하지 않던 비밀번호를 까먹기 쉽죠.
이 글에서는 MySQL의 root 비밀번호를 잊어버렸을 때 초기화하는 방법을 안내합니다. 리눅스(Ubuntu 기준) 서버 환경을 기준으로 설명드릴게요.

MySQL 비밀번호 재설정 방법 정리
MySQL을 비밀번호 없이 실행하도록 설정
#MySQL 서버 중지 (MariaDB는 mariadb로 바뀔 수 있음)
sudo systemctl stop mysql
#비밀번호 인증 없이 MySQL을 임시로 실행
sudo mysqld_safe --skip-grant-tables &
#비밀번호 없이 루트 계정으로 로그인
mysql -u root
skip-grant-tables로 실행했는데도 접속이 안 되는 경우?
- MySQL이 이미 실행 중인 상태일 수 있습니다.
sudo lsof -i :3306
또는sudo netstat -tulnp | grep mysql
로 포트를 확인 후 종료
MySQL 버전 확인 방법
mysql --version
또는 MySQL에 접속해서:
SELECT VERSION();
MySQL 버전별 root 비밀번호 변경 명령어
🔹 MySQL 5.7 이상
(대부분의 버전)
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '새비밀번호';
mysql_native_password
는 WordPress와의 호환성을 위해 명시해주는 것이 좋습니다.ALTER USER
명령어는 MySQL 5.7.6 이상에서 지원됩니다.
🔹 MySQL 5.6 이하
(구형 CentOS, Ubuntu 14 계열 등)
USE mysql;
UPDATE user SET password = PASSWORD('새비밀번호') WHERE user = 'root';
FLUSH PRIVILEGES;
password
컬럼이 존재하는 구버전에서는UPDATE user
방식이 필요ALTER USER
명령어는 지원되지 않음!
🔹 MySQL 8.0 이상
(보안 정책이 더 엄격해진 최신 버전)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '새비밀번호';
FLUSH PRIVILEGES;
또는 더 권장되는 방법은:
ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호';
- MySQL 8.0에서는 기본 인증 플러그인이
caching_sha2_password
이기 때문에, 만약 워드프레스 등에서 호환되지 않는다면mysql_native_password
로 명시 필요
MySQL 버전 별 비밀번호 변경 명령어 비교
버전 | 명령어 |
---|---|
MySQL 5.6↓ | UPDATE user SET password = PASSWORD('pw') + FLUSH PRIVILEGES; |
MySQL 5.7 | ALTER USER ... IDENTIFIED WITH mysql_native_password BY 'pw'; |
MySQL 8.0↑ | ALTER USER ... IDENTIFIED BY 'pw'; 또는 mysql_native_password로 변경 |
MySQL 재시작
exit
MySQL 종료 후
sudo killall -9 mysqld
sudo systemctl start mysql
모든 작업이 끝났으면 mysqld_safe
프로세스를 종료하고 MySQL을 다시 정상적으로 실행
MySQL 정상 로그인 확인
이제 새 비밀번호로 로그인해봅니다:
mysql -u root -p
비밀번호 입력 시 정상적으로 로그인되면 성공입니다.
MariaDB 비밀번호 재설정 방법 정리
MariaDB는 MySQL과 거의 같은 명령어 체계를 사용하지만, 버전에 따라 사용자 인증 방식이 다를 수 있습니다. 특히 root 계정이 unix_socket
플러그인을 사용하는 경우가 많아, 단순히 mysql -u root
만으로도 로그인이 될 수 있습니다.
MariaDB를 비밀번호 없이 실행하도록 설정
# MySQL 또는 MariaDB 서버 중지
sudo systemctl stop mysql # 또는: sudo systemctl stop mariadb
# 인증 없이 MySQL/MariaDB 임시 실행
sudo mysqld_safe --skip-grant-tables &
권한 없이 실행하도록 한 후
mysql -u root
#또는
sudo mariadb
이게 바로 실행된다면 루트 인증이 unix_socket
으로 되어 있는 상태입니다.
이제 비밀번호를 바꿔보겠습니다.
방법 1: unix_socket
을 유지한 채 비밀번호 설정
ALTER USER 'root'@'localhost' IDENTIFIED BY '새비밀번호';
이 방법은 비밀번호도 설정하고,
sudo mariadb
접속도 유지할 수 있습니다.
방법 2: 일반 패스워드 인증으로 전환 (MySQL처럼)
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('새비밀번호');
또는:
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('새비밀번호') WHERE User = 'root';
FLUSH PRIVILEGES;
MariaDB 데몬 재시작
sudo systemctl restart mariadb
로그인 테스트
mysql -u root -p
InnoDB 비밀번호 재설정 방법 정리
InnoDB는 MySQL/MariaDB 내부의 저장 엔진입니다. 즉, InnoDB가 설치되었다고 해서 별도의 인증/접속 방식이 있는 건 아니고, 다음과 같은 점에서 주의가 필요합니다:
1. --skip-grant-tables
는 InnoDB에도 적용 가능
이 옵션은 인증체계를 비활성화시키는 것이기 때문에 InnoDB 여부와 상관없이 사용 가능합니다.
sudo systemctl status mysql # 또는 sudo systemctl stop mariadb
sudo mysqld_safe --skip-grant-tables &
→ 이후 mysql
, mariadb
, root
로그인 및 비밀번호 초기화 진행
2. InnoDB의 데이터 무결성이 중요
만약 비정상적인 종료를 반복하거나 kill -9
명령을 여러 번 사용하면 InnoDB 테이블이 깨질 수 있습니다. 꼭 다음 순서로 종료하세요:
mysql> exit;
sudo killall -9 mysqld
sudo systemctl start mariadb
그리고 /var/lib/mysql/ibdata1
파일은 InnoDB 시스템 테이블이므로 삭제 금지입니다.
비밀번호 변경
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('새비밀번호');
--또는
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('새비밀번호') WHERE User = 'root';
FLUSH PRIVILEGES;
ALTER USER
, CREATE USER
, SET PASSWORD
등을 사용한 경우
이 명령어들은 내부적으로 자동으로 FLUSH 작업을 수행합니다.
→ 이 경우에는 자동 적용되므로 FLUSH PRIVILEGES
불필요
mysql.user 테이블을 UPDATE
, INSERT
, DELETE
로 직접 수정했을 때UPDATE
만 하고 FLUSH PRIVILEGES;
를 하지 않으면 변경 사항이 즉시 적용되지 않습니다.
user 테이블을 직접 건드렸다면 FLUSH PRIVILEGES
는 필수,
명령어(ALTER USER
, SET PASSWORD
등)를 썼다면 생략 가능
MariaDB + InnoDB 비밀번호 초기화 요약
단계 | 내용 |
---|---|
1 | MariaDB 중지: sudo systemctl stop mariadb |
2 | 인증 없이 실행: sudo mysqld_safe --skip-grant-tables & |
3 | mysql -u root 로 접속 |
4 | root 비밀번호 변경 (ALTER USER ... ) |
5 | FLUSH PRIVILEGES 후 종료 |
6 | 프로세스 종료 후 MariaDB 재시작 |
7 | mysql -u root -p 로그인 확인 |
추가 팁: root 말고 다른 유저일 경우?
다른 사용자(example_user
)의 비밀번호를 변경하려면:
ALTER USER 'example_user'@'localhost' IDENTIFIED BY '새비밀번호';