MySQL이나 MariaDB를 사용하다보면 FLUSH PRIVILEGES라는 명령어를 자주 사용하게 된다. 대체 무슨 의미일까.

보통은 INSERT, DELETE, UPDATE를 통해 사용자를 추가, 삭제, 권한 변경 등을 수행하였을 때 이 변경 사항을 반영하기 위하여 사용한다. 이 떄 FLUSH PRIVILEGES는 grant 테이블을 reload함으로서 변경 사항을 즉시 반영하도록 한다.

UPDATE USER SET PASSWORD=password('새로운패스워드') WHERE USER='사용자명';
FLUSH PRIVILEGES;
DELETE FROM USER WHERE USER='사용자명';
FLUSH PRIVILEGES;

그런데 만약 INSERT, DELETE, UPDATE와 같은 SQL문을 사용하지 않고 바로 grant 명령어를 사용하여 작업하였다면 FLUSH PRIVILEGES를 실행할 필요가 없어진다.

또한 MySQL/MariaDB 상이 아닌 OS 커맨드 상에서도 flush를 할 수 있다.

$ mysqladmin reload
$ mysqladmin flush-privileges

패스워드가 설정된 경우는 인증을 해야 한다.

$ mysqladmin -u root -p reload
Enter password:

그런데 이 FLUSH PRIVILEGES는 굉장히 성능에 영향을 준다. 특히 습관적으로 FLUSH PRIVILEGES를 사용하는 경우가 있는데(모든 명령 이후에 사용하는 경우도 있다) 이는 엄청난 부하가 된다.