DB

[MySQL] FLUSH 완벽 가이드 사용법(데이터베이스 캐시 및 상태 초기화)

인생아 2025. 2. 18. 08:35
반응형

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에서는 쿼리 실행 횟수, 연결 실패 횟수 등 다양한 서버 상태 정보를 기록합니다. 이를 초기화하려면 다음 명령어를 실행하면 됩니다.

sql
복사편집
FLUSH STATUS;
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 사용 시 주의사항

  1. FLUSH 명령어 실행 시 성능 저하 가능
    • 테이블을 닫거나 캐시를 비우면 순간적으로 MySQL의 성능이 저하될 수 있음
    • 서버 부하가 적은 시간대에 실행하는 것이 권장됨
  2. FLUSH PRIVILEGES는 필요한 경우에만 실행
    • 사용자의 권한이 변경될 때만 실행해야 하며, 불필요하게 실행하면 성능 저하 가능
  3. FLUSH LOGS 사용 시 기존 로그가 보존되는지 확인
    • 기존 로그를 유지해야 하는 경우, 로그 보관 설정을 적용한 후 실행 필요

결론

MySQL의 FLUSH 명령어는 캐시, 로그, 테이블 핸들러, 사용자 권한 등을 초기화하고 성능을 최적화하는 데 필수적인 도구입니다. 특정한 상황에서 FLUSH를 적절히 활용하면 데이터베이스의 성능을 유지하고 문제를 예방할 수 있습니다.

참고 자료

공식 가이드 문서: https://dev.mysql.com/doc/refman/8.0/en/flush.html

반응형