MySQL에서 FLUSH 명령어는 캐시(Cache), 로그(Log), 테이블(Tables), 사용자 권한(Privileges) 등의 데이터를 초기화하거나 새로고침할 때 사용하는 중요한 SQL 명령어입니다. MySQL을 장시간 운영하면 내부적으로 캐시나 로그 파일이 쌓이게 되는데, FLUSH 명령어를 사용하면 불필요한 데이터를 정리하고 성능을 최적화할 수 있습니다.
FLUSH 명령어란?
FLUSH는 MySQL 서버에서 특정한 시스템 리소스를 초기화하거나 새로고침하는 역할을 합니다. 일반적으로 다음과 같은 작업을 수행할 때 사용됩니다.
- 캐시(Cache) 초기화
- 로그(Log) 파일 새로고침 및 롤오버(Rollover)
- 테이블(Tables) 다시 로드 및 파일 디스크에 저장
- 사용자 권한(Privileges) 새로고침
FLUSH의 필요성
MySQL 서버가 오랫동안 실행되면 내부적으로 메모리 캐시, 테이블 핸들러, 로그 파일 등이 축적됩니다. 이를 정리하지 않으면 메모리 사용량 증가로 인해 성능이 저하될 수 있으며, 새로운 설정이 즉시 반영되지 않을 수도 있습니다.
FLUSH를 사용하면 다음과 같은 장점이 있습니다.
- 메모리 사용 최적화 및 불필요한 캐시 삭제
- 로그 파일 교체 및 보존을 통한 서버 성능 유지
- MySQL 사용자 권한 변경 사항을 즉시 반영
- 파일 시스템과 MySQL 데이터 동기화
이제 FLUSH의 다양한 활용 방법과 예제를 살펴보겠습니다.
FLUSH 기본 문법
FLUSH 대상;
- 대상: 초기화할 시스템 요소 (캐시, 테이블, 로그, 권한 등)
FLUSH CACHES: 캐시 초기화
MySQL에서는 데이터 및 쿼리 결과를 저장하는 캐시(Cache)를 사용하여 성능을 향상시킵니다. 하지만 특정 상황에서는 캐시를 초기화해야 할 필요가 있습니다.
FLUSH TABLES;
위 명령어는 모든 열린 테이블을 닫고 캐시를 초기화합니다.
FLUSH TABLES WITH READ LOCK;
이 명령어는 모든 테이블을 닫고 읽기 잠금(READ LOCK)을 설정하여 백업 작업을 수행할 때 유용합니다.
실행 예제
SHOW STATUS LIKE 'Open_tables';
FLUSH TABLES;
SHOW STATUS LIKE 'Open_tables';
FLUSH TABLES 실행 전후의 Open_tables 값이 변경되었음을 확인할 수 있습니다.
FLUSH PRIVILEGES: 사용자 권한 갱신
MySQL에서 사용자 계정을 생성하거나 권한을 변경한 후에는 FLUSH PRIVILEGES 명령어를 실행해야 변경 사항이 즉시 반영됩니다.
FLUSH PRIVILEGES;
실행 예제
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'test_user'@'localhost';
FLUSH PRIVILEGES;
이렇게 하면 새로운 사용자의 권한이 즉시 적용됩니다.
FLUSH LOGS: 로그 파일 새로고침
MySQL은 에러 로그, 일반 로그, 슬로우 쿼리 로그 등 다양한 로그 파일을 저장합니다. 서버가 실행되는 동안 로그 파일을 새로고침(롤오버, Rollover)해야 할 때 FLUSH LOGS를 사용할 수 있습니다.
FLUSH LOGS;
이 명령어를 실행하면 MySQL이 현재 활성화된 모든 로그 파일을 닫고 새로운 로그 파일을 생성합니다.
실행 예제
FLUSH LOGS;
SHOW VARIABLES LIKE 'log_error';
이렇게 하면 MySQL 로그 파일이 새롭게 열리며, 기존 로그가 보존됩니다.
FLUSH HOSTS: 호스트 캐시 초기화
MySQL에서는 반복적인 연결 실패가 발생하면 해당 IP를 차단하는 메커니즘이 존재합니다. 이를 해결하려면 FLUSH HOSTS 명령어를 사용하여 호스트 캐시를 초기화해야 합니다.
FLUSH HOSTS;
실행 예제
FLUSH HOSTS;
SHOW STATUS LIKE 'Aborted_connects';
이렇게 하면 MySQL이 차단했던 클라이언트 연결을 해제할 수 있습니다.
FLUSH STATUS: 서버 상태 정보 초기화
MySQL에서는 쿼리 실행 횟수, 연결 실패 횟수 등 다양한 서버 상태 정보를 기록합니다. 이를 초기화하려면 다음 명령어를 실행하면 됩니다.
FLUSH STATUS;
이 명령어를 실행하면 SHOW STATUS에서 확인할 수 있는 모든 상태 정보가 초기화됩니다.
실행 예제
SHOW STATUS LIKE 'Com_select';
FLUSH STATUS;
SHOW STATUS LIKE 'Com_select';
FLUSH STATUS를 실행하면 SELECT 쿼리 실행 횟수(Com_select)가 초기화됩니다.
FLUSH ENGINE LOGS: 엔진별 로그 초기화
MySQL에서 스토리지 엔진(InnoDB, MyISAM 등)의 로그 파일을 초기화하려면 FLUSH ENGINE LOGS를 사용할 수 있습니다.
FLUSH ENGINE LOGS;
이 명령어를 실행하면 각 스토리지 엔진이 사용 중인 로그 파일을 닫고 새로운 로그 파일을 생성합니다.
FLUSH 사용 시 주의사항
- FLUSH 명령어 실행 시 성능 저하 가능
- 테이블을 닫거나 캐시를 비우면 순간적으로 MySQL의 성능이 저하될 수 있음
- 서버 부하가 적은 시간대에 실행하는 것이 권장됨
- FLUSH PRIVILEGES는 필요한 경우에만 실행
- 사용자의 권한이 변경될 때만 실행해야 하며, 불필요하게 실행하면 성능 저하 가능
- FLUSH LOGS 사용 시 기존 로그가 보존되는지 확인
- 기존 로그를 유지해야 하는 경우, 로그 보관 설정을 적용한 후 실행 필요
결론
MySQL의 FLUSH 명령어는 캐시, 로그, 테이블 핸들러, 사용자 권한 등을 초기화하고 성능을 최적화하는 데 필수적인 도구입니다. 특정한 상황에서 FLUSH를 적절히 활용하면 데이터베이스의 성능을 유지하고 문제를 예방할 수 있습니다.
참고 자료
공식 가이드 문서: https://dev.mysql.com/doc/refman/8.0/en/flush.html
'DB' 카테고리의 다른 글
[MySQL] CREATE SERVER 완벽 가이드 사용법(원격 데이터 소스 등록) (0) | 2025.02.19 |
---|---|
[MySQL] UNINSTALL PLUGIN 완벽 가이드 사용법(플러그인 삭제) (0) | 2025.02.18 |
[MySQL] INSTALL PLUGIN 완벽 가이드 사용법(플러그인 설치) (0) | 2025.02.18 |
[MySQL] RESET QUERY CACHE 완벽 가이드 사용법(쿼리 캐시 초기화) (0) | 2025.02.18 |
[MySQL] DROP TABLESPACE 완벽 가이드 사용법(테이블스페이스 삭제) (0) | 2025.02.17 |
[MySQL] ALTER TABLESPACE 완벽 가이드 사용법(테이블스페이스 수정 및 관리) (0) | 2025.02.12 |
[MySQL] CREATE TABLESPACE 완벽 가이드 사용법(테이블스페이스 생성) (0) | 2025.02.11 |
[MySQL] DROP LOGFILE GROUP 완벽 가이드 사용법(로그 파일 그룹 삭제) (0) | 2025.02.10 |