MySQL · MariaDB 비밀번호 초기화 방법 (InnoDB 포함, 버전별 명령어 정리)

By: master

MySQL 또는 MariaDB를 사용하다 보면 가끔 관리자(root) 비밀번호를 잊어버리는 일이 생깁니다. 특히 서버 세팅 후 시간이 지나면 자주 접속하지 않던 비밀번호를 까먹기 쉽죠.

이 글에서는 MySQL의 root 비밀번호를 잊어버렸을 때 초기화하는 방법을 안내합니다. 리눅스(Ubuntu 기준) 서버 환경을 기준으로 설명드릴게요.

db 비밀번호 분실

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.7ALTER 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 비밀번호 초기화 요약

단계내용
1MariaDB 중지: sudo systemctl stop mariadb
2인증 없이 실행: sudo mysqld_safe --skip-grant-tables &
3mysql -u root로 접속
4root 비밀번호 변경 (ALTER USER ...)
5FLUSH PRIVILEGES 후 종료
6프로세스 종료 후 MariaDB 재시작
7mysql -u root -p 로그인 확인

추가 팁: root 말고 다른 유저일 경우?

다른 사용자(example_user)의 비밀번호를 변경하려면:

ALTER USER 'example_user'@'localhost' IDENTIFIED BY '새비밀번호';

Leave a Comment