MySQL을 사용하면서 사용자 계정을 생성하거나 수정한 후, 변경 사항이 즉시 적용되지 않는 경우가 있다.
이럴 때 FLUSH PRIVILEGES 명령어를 사용하면 변경된 사용자 계정 및 권한 정보가 MySQL 서버에 반영된다.
MySQL은 내부적으로 사용자 계정 및 권한 정보를 캐시(Cache)에 저장하여,
데이터베이스의 성능을 최적화한다. 하지만 새로운 사용자 계정 추가, 비밀번호 변경, 권한 수정 등을 수행한 후에는
변경 사항을 적용하기 위해 수동으로 FLUSH PRIVILEGES 명령어를 실행해야 한다.

1. FLUSH PRIVILEGES 명령어란?
FLUSH PRIVILEGES는 MySQL 서버의 권한 캐시를 갱신(리로드)하는 명령어이다.
MySQL 서버는 사용자 권한 정보를 mysql 데이터베이스의 user, db, host 테이블에 저장하는데,
이 테이블의 변경 사항이 자동으로 반영되지 않기 때문에 변경 후 반드시 FLUSH PRIVILEGES를 실행해야 한다.
기본 구문
FLUSH PRIVILEGES;
- 별도의 사용자 지정 없이 단순히 FLUSH PRIVILEGES; 명령어를 실행하면
MySQL의 모든 사용자 계정 및 권한 정보가 다시 로드된다.
2. FLUSH PRIVILEGES가 필요한 경우
FLUSH PRIVILEGES 명령어는 다음과 같은 경우에 반드시 실행해야 한다.
- 새로운 사용자 계정을 수동으로 추가한 경우
- 사용자 비밀번호를 직접 변경한 경우
- 사용자 권한을 직접 변경한 경우
- MySQL의 mysql 데이터베이스를 직접 수정한 경우
- 사용자 계정을 삭제했지만 여전히 적용되지 않는 경우
MySQL에서는 GRANT 또는 REVOKE 명령어를 사용할 경우,
자동으로 권한이 갱신되므로 FLUSH PRIVILEGES를 실행할 필요가 없다.
그러나 수동으로 권한 테이블을 수정한 경우에는 반드시 실행해야 한다.
3. FLUSH PRIVILEGES 실행 예제
예제 1: 새로운 사용자 추가 후 FLUSH PRIVILEGES 실행
MySQL에서 새로운 사용자를 수동으로 추가할 경우,
변경 사항이 반영되지 않기 때문에 반드시 FLUSH PRIVILEGES를 실행해야 한다.
INSERT INTO mysql.user (Host, User, Password) VALUES ('localhost', 'newuser', PASSWORD('mypassword'));
FLUSH PRIVILEGES;
- INSERT INTO mysql.user를 사용하여 직접 사용자를 추가했기 때문에
변경 사항이 즉시 반영되지 않으며, FLUSH PRIVILEGES를 실행해야 정상적으로 로그인 가능하다.
예제 2: 사용자의 비밀번호를 직접 변경한 후 적용
UPDATE mysql.user SET authentication_string = PASSWORD('newpassword') WHERE User = 'testuser';
FLUSH PRIVILEGES;
- 위와 같이 직접 mysql.user 테이블을 수정하여 비밀번호를 변경한 경우,
반드시 FLUSH PRIVILEGES를 실행해야 변경 사항이 적용된다.
예제 3: 사용자 계정을 삭제했지만 여전히 로그인이 가능한 경우
DELETE FROM mysql.user WHERE User = 'olduser';
FLUSH PRIVILEGES;
- DELETE FROM mysql.user를 실행한 후 FLUSH PRIVILEGES를 하지 않으면,
삭제된 계정이 계속 로그인할 수 있는 문제가 발생할 수 있다.
예제 4: 사용자 권한을 직접 수정한 후 반영
UPDATE mysql.db SET Select_priv = 'Y' WHERE User = 'testuser';
FLUSH PRIVILEGES;
- mysql.db 테이블에서 특정 사용자의 SELECT 권한을 수동으로 수정한 경우,
반드시 FLUSH PRIVILEGES를 실행해야 변경 사항이 적용된다.
4. FLUSH PRIVILEGES 실행이 필요하지 않은 경우
FLUSH PRIVILEGES 명령어는 GRANT 또는 REVOKE 명령어를 사용할 때 필요하지 않다.
예를 들어, 다음과 같이 GRANT 명령어를 사용하여 권한을 부여하는 경우
MySQL이 자동으로 권한을 갱신하므로 FLUSH PRIVILEGES를 실행하지 않아도 된다.
예제 5: GRANT 명령어를 사용할 경우 자동 반영됨
GRANT SELECT, INSERT ON mydb.* TO 'testuser'@'localhost' IDENTIFIED BY 'mypassword';
- 위와 같이 GRANT를 사용하여 새로운 사용자를 추가하면 자동으로 권한이 적용되므로
FLUSH PRIVILEGES를 실행할 필요가 없다.
5. MySQL 8.0에서의 변경 사항
MySQL 8.0에서는 mysql.user 테이블의 직접 수정이 제한되었다.
따라서 FLUSH PRIVILEGES 명령어를 실행할 일이 줄어들었으며,
대부분 ALTER USER, GRANT, REVOKE 명령어를 사용하면 자동 반영된다.
그러나 MySQL 5.7 이하의 버전에서는 여전히 직접 수정이 가능하기 때문에
이전 버전을 사용할 경우 FLUSH PRIVILEGES 명령어가 필요할 수 있다.
6. MySQL 성능과 FLUSH PRIVILEGES
FLUSH PRIVILEGES 명령어는 사용자 계정과 권한 캐시를 강제로 리로드하기 때문에,
불필요하게 자주 실행하면 성능 저하를 초래할 수 있다.
따라서 권한 변경이 발생할 때만 실행하는 것이 바람직하다.
7. 마무리
FLUSH PRIVILEGES는 MySQL에서 사용자 계정 및 권한 변경 사항을 즉시 적용하는 중요한 명령어이다.
특히 MySQL 5.7 이하 버전에서 사용자 정보를 직접 수정할 경우 변경 사항을 반영하는 필수적인 과정이다.
하지만 MySQL 8.0 이상에서는 GRANT, ALTER USER, REVOKE 등의 명령어가
자동으로 적용되므로, 직접 실행할 필요가 줄어들었다.
공식 가이드 문서
MySQL FLUSH PRIVILEGES 공식 문서:
https://dev.mysql.com/doc/refman/8.0/en/flush.html
'DB' 카테고리의 다른 글
[MySQL] RESET PASSWORD 완벽 가이드 사용법(비밀번호 변경) (0) | 2025.04.02 |
---|---|
[MySQL] SHOW PRIVILEGES 완벽 가이드 사용법(모든 권한 확인) (0) | 2025.04.02 |
[MySQL] UNLOCK TABLES 완벽 가이드 사용법(테이블 잠금 해제) (0) | 2025.04.02 |
[MySQL] LOCK TABLES 완벽 가이드 사용법(테이블 잠금) (0) | 2025.04.02 |
[MySQL] SHOW GRANTS 완벽 가이드 사용법(사용자 권한 확인) (0) | 2025.04.02 |
[MySQL] SET PASSWORD 완벽 가이드 사용법(비밀번호 변경) (0) | 2025.04.02 |
[MySQL] RENAME USER 완벽 가이드 사용법(사용자 계정명 변경) (0) | 2025.04.01 |
[MySQL] ALTER USER 완벽 가이드 사용법(사용자 계정 변경) (0) | 2025.04.01 |