[MySQL] Flush 명령

■ Flush 명령문

FLUSH [NO_WRITE_TO_BINLOG | LOCAL] {
    flush_option [, flush_option] ...
  | tables_option
}

flush_option: {
    BINARY LOGS
  | DES_KEY_FILE
  | ENGINE LOGS
  | ERROR LOGS
  | GENERAL LOGS
  | HOSTS
  | LOGS
  | PRIVILEGES
  | OPTIMIZER_COSTS
  | QUERY CACHE
  | RELAY LOGS [FOR CHANNEL channel]
  | SLOW LOGS
  | STATUS
  | USER_RESOURCES
}

tables_option: {
    TABLES
  | TABLES tbl_name [, tbl_name] ...
  | TABLES WITH READ LOCK
  | TABLES tbl_name [, tbl_name] ... WITH READ LOCK
  | TABLES tbl_name [, tbl_name] ... FOR EXPORT
}

FLUSH 문에는 다양한 내부 캐시를 지우거나 다시로드하거나 테이블을 비우거나 잠금을 획득하는 가지 변형 양식이 있습니다. FLUSH 실행하려면 RELOAD 권한이 있어야합니다. 나중에 설명 하듯이 특정 플러시 옵션에는 추가 권한이 필요할 있습니다.

 

▶︎ 참고사항

저장된 함수(Stored Function) 또는 트리거 내에서 FLUSH 문을 발행 없습니다. 그러나 스토어드 함수 또는 트리거에서 호출되지 않는 스토어드 프로시저에서 FLUSH 사용할 있습니다.

FLUSH LOGS, FLUSH BINARY LOGS, READ LOCK 있는 FLUSH TABLES(테이블 목록 유무에 관계없이) FLUSH TABLES tbl_name ... FOR EXPORT 복제본에 복제될 경우 문제를 일으킬 있으므로 어떠한 경우에도 바이너리 로그에 기록되지 않습니다.

 

기본적으로 서버는 FLUSH 문을 바이너리 로그에 작성하여 복제본에 복제합니다. 로깅을 억제하려면 선택적 NO_WRITE_TO_BINLOG 키워드 또는 별명 LOCAL 지정합니다.

 

FLUSH 문은 내부적으로 커미트를 실행합니다.

 

mysqladmin 유틸리티는 flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables 같은 명령을 사용하여 일부 플러시 작업에 명령줄 인터페이스(CLI) 제공합니다.

 

SIGHUP 신호를 서버로 전송하면 다양한 형태의 FLUSH문과 유사한 여러 개의 플러시 조작이 발생합니다. 신호는 루트 또는 서버 프로세스를 소유한 계정으로 보낼 있습니다. 서버에 연결하지 않고도 해당 플러시 작업을 수행 있습니다( 작업에는 RELOAD 권한이있는 계정이 필요합니다).

 

RESET 문은 FLUSH 유사합니다.

 

다음 목록은 허용된 FLUSH flush_option 값을 설명합니다. FLUSH TABLES 옵션에 대한 설명은 아래 FLUSH TABLES 구문을 참곻합니다.

• FLUSH BINARY LOGS

서버가 쓰고있는 이진 로그 파일을 닫았다가 다시 엽니 . 이진 로깅이 활성화 경우 이진 로그 파일의 시퀀스 번호는 이전 파일과 비교하여 1 증가합니다.

 

• FLUSH DES_KEY_FILE

서버 시작시 --des-key-file 옵션으로 지정된 파일에서 DES 키를 다시로드합니다.

참고사항

DES_ENCRYPT () DES_DECRYPT () 함수는 MySQL 5.7.6부터 이상 사용되지 않으며 향후 MySQL 릴리스에서 제거되어 이상 사용되지 않습니다. 결과적으로 --des-key-file DES_KEY_FILE 이상 사용되지 않으며 제거됩니다.

 

• FLUSH ENGINE LOGS

설치된 스토리지 엔진에 대한 플러시 가능 로그를 닫았다가 다시 엽니 . 이로 인해 InnoDB 로그를 디스크로 플러시합니다.

 

• FLUSH ERROR LOGS

서버가 쓰고있는 오류 로그 파일을 닫았다가 다시 엽니 .

 

• FLUSH GENERAL LOGS

서버가 쓰고있는 일반 쿼리 로그 파일을 닫았다가 다시 엽니 .

 

• FLUSH HOSTS

캐시 내용을 노출하고 차단 호스트를 차단 해제하는 호스트 캐시 성능 스키마 host_cache 테이블을 웁니다. 5.1.11.2 “DNS 조회 호스트 캐시 참조하십시오.

 

일부 호스트가 IP 주소를 변경하거나 호스트 'host_name' 차단되었다는 오류 메시지가 정당한 호스트의 연결에 대해 발생하면 호스트 캐시를 플러시하십시오. (B.4.2.5 .“호스트 'host_name'호스트가 차단되었습니다.” 참조하십시오.) MySQL 서버에 연결하는 동안 주어진 호스트에 대해 max_connect_errors 이상의 오류가 연속적으로 발생하면, MySQL 무언가 잘못되었다고 가정하고 추가 연결로부터 호스트를 차단합니다 요청. 호스트 캐시를 비우면 호스트에서 추가 연결을 시도 있습니다. max_connect_errors 기본값은 100입니다. 오류 메시지를 피하려면 max_connect_errors 값으로 설정하여 서버를 시작하십시오.

 

• FLUSH LOGS

서버가 쓰고있는 로그 파일을 닫았다가 다시 엽니 . 바이너리 로깅이 활성화된 경우 바이너리 로그 파일의 시퀀스 번호는 이전 파일과 비교하여 1 증가합니다. 릴레이 로깅이 활성화되면 릴레이 로그 파일의 시퀀스 번호가 이전 파일에 비해 1 증가합니다.

 

FLUSH LOGS 일반 쿼리 로그(General Query Log0 또는 느린 쿼리 로그(Slow Query Log) 사용 테이블에는 영향을 미치지 않습니다.

 

• FLUSH OPTIMIZER_COSTS

옵티마이 저가 테이블에 저장된 현재 비용 추정치를 사용하기 시작하도록 비용 모델 테이블을 다시 읽습니다. 서버는 인식 수없는 항목에 대한 경고를 오류 로그에 기록합니다. ( 테이블에 대한 정보는 8.9.5 .“최적화 비용 모델 참조하십시오.) 작업은 플러시 이후에 시작되는 세션에만 영향을줍니다. 기존 세션은 시작했을 때의 현재 예상 비용을 계속 사용합니다.

 

• FLUSH PRIVILEGES

mysql 시스템 데이터베이스의 권한 부여 테이블에서 권한을 다시로드합니다.

 

MySQL 권한 시스템을 비활성화하기 위해 서버 시작시 --skip-grant-tables 옵션을 지정한 경우 FLUSH PRIVILEGES 런타임시 권한 시스템을 활성화하는 방법을 제공합니다.

 

GRANT, CREATE USER, CREATE SERVER INSTALL PLUGIN 문의 결과로 서버에 의해 캐시 메모리를 해제합니다. 메모리는 해당 REVOKE, DROP USER, DROP SERVER UNINSTALL PLUGIN 문에 의해 해제되지 않으므로 캐싱을 유발하는 명령문의 많은 인스턴스를 실행하는 서버의 경우 캐시 메모리 사용을 늘리지 않으면 캐시 메모리 사용이 증가합니다. FLUSH PRIVILEGES.

 

• FLUSH QUERY CACHE

메모리를 활용하기 위해 쿼리 캐시를 조각 모음하십시오. FLUSH QUERY CACHE FLUSH TABLES 또는 QUERY CACHE 재설정과 달리 캐시에서 쿼리를 제거하지 않습니다.

 

노트

쿼리 캐시는 MySQL 5.7.20부터 이상 사용되지 않으며 MySQL 8.0에서 제거되었습니다. 사용 중단에는 FLUSH QUERY CACHE 포함됩니다.

 

• FLASHH RELAY LOGS [FOR CHANNEL 채널]

서버가 쓰고있는 릴레이 로그 파일을 닫았다가 다시 엽니다. 릴레이 로깅이 활성화되면 릴레이 로그 파일의 시퀀스 번호가 이전 파일에 비해 1 증가합니다.

 

FOR CHANNEL명령문을 이용하여 채널명령을 사용하면 명령문이 적용되는 복제 채널의 이름을 지정할 있습니다. 채널 채널에 대해 FLUSH RELAY LOGS 실행하여 특정 복제 채널에 대한 릴레이 로그를 플러시합니다. 이름이 지정된 채널이없고 추가 복제 채널이 없으면 명령문이 기본 채널에 적용됩니다. 이름이 지정된 채널이없고 여러 개의 복제 채널이 존재하면 group_replication_applier 채널을 제외하고 명령문은 모든 복제 채널에 적용됩니다. 자세한 내용은 16.2.3 .“복제 채널 참조하십시오.

 

FOR CHANNEL 채널 절에서는 문이 적용되는 복제 채널의 이름을 지정할 있습니다. 채널 채널에 대한 플러시 릴레이 로그를 실행하여 특정 복제 채널에 대한 릴레이 로그를 플러시합니다. 이름이 지정되지 않은 채널과 추가 복제 채널이 없는 경우 문은 기본 채널에 적용됩니다. 이름이 지정되지 않은 채널이 있고 복제 채널이 여러 있으면 group_replication_applyer 채널을 제외한 모든 복제 채널에 문이 적용됩니다. 자세한 정보는 섹션 16.2.3 "복제 채널" 참조하시기 바랍니다.

 

• FLUSH SLOW LOGS

서버가 쓰고있는 느린 쿼리 로그 파일을 닫았다가 다시 엽니 .

 

• FLUSH STATUS

노트

show_compatibility_56 시스템 변수의 값은이 옵션의 작동에 영향을줍니다. 자세한 내용은 5.1.7 서버 시스템 변수에서 해당 변수에 대한 설명을 참조하십시오.

 

옵션은 현재 스레드의 세션 상태 변수 값을 전역 값에 추가하고 세션 값을 0으로 재설정합니다. 일부 전역 변수도 0으로 재설정 있습니다. 또한 캐시 (기본 명명 ) 카운터를 0으로 재설정하고 Max_used_connections 현재 열려있는 연결 수로 설정합니다. 정보는 쿼리를 디버깅 유용 있습니다. 1.7 .“버그 또는 문제보고 방법 참조하십시오.

 

• FLUSH USER_RESOURCES

모든 시간당 사용자 자원을 0으로 재설정합니다. 이를 통해 시간별 연결, 쿼리 또는 업데이트 제한에 도달 클라이언트는 즉시 활동을 재개 있습니다. FLUSH USER_RESOURCES max_user_connections 시스템 변수에 의해 제어되는 최대 동시 연결 제한에 적용되지 않습니다. 6.2.16 계정 자원 제한 설정 참조하십시오.

 

 

 

■ FLUSH TABLES 구문

FLUSH TABLES 테이블을 플러시하고 사용된 옵션이나 유형에 따라 잠금을 획득합니다. FLUSH 문에 의해 사용된 옵션이나 유형은 모든 TABLES 변형에 사용될때 유일한 옵션이어야합니다. FLUSH TABLE FLUSH TABLES 동의어입니다.

 

FLUSH TABLES 테이블을 플러시하고 사용된 유형에 따라 잠금을 획득합니다. FLUSH 문에서 사용되는 모든 TABLE 유형은 유일한 옵션이어야 합니다. FLUSH TABLE FLUSH TABLES 동의어입니다.(S 붙고 안붙고 차이)

 

▶︎ 참고사항

테이블을 닫음으로써 테이블이 플러시됨을 나타내는 여기의 설명은 테이블 내용을 디스크로 플러시하지만 열린 상태로 유지하는 InnoDB 대해 다르게 적용됩니다. 이렇게하면 다른 활동이 수정하지 않는 테이블이 열려있는 동안 테이블 파일을 복사할 있습니다.

 

• FLUSH TABLES

열려있는 모든 테이블을 닫고, 사용중인 모든 테이블을 강제로 닫고, 쿼리 캐시와 준비된 명령문 캐시를 플러시합니다. FLUSH TABLES 또한 RESET QUERY CACHE 문과 같이 쿼리 캐시에서 모든 쿼리 결과를 제거합니다.

 

활동중인 LOCK TABLES ... READ 있으면 FLUSH TABLES 허용되지 않습니다. 테이블을 비우고 그려면 FLUSH TABLES tbl_name ... WITH READ LOCK 대신 사용합니다.

 

• FLUSH TABLES tbl_name [, tbl_name] ...

하나 이상의 쉼표로 구분 테이블 이름 목록이있는이 명령문은 서버가 이름 지정된 테이블 플러시한다는 점을 제외하고 이름이없는 FLUSH TABLES 같습니다. 명명 테이블이 없으면 오류가 발생하지 않습니다.

 

• FLUSH TABLES WITH READ LOCK

열려있는 모든 테이블을 닫고 전역 읽기 잠금으로 모든 데이터베이스의 모든 테이블을 잠급니다. Veritas 또는 ZFS 같은 시간 내에 스냅 샷을 찍을 있는 파일 시스템이 있는 경우 백업을 얻는 매우 편리한 방법입니다. 잠금 해제 테이블을 사용하여 잠금을 해제합니다.

 

FLUSH TABLES WITH READ LOCK 테이블 잠금이 아닌 전역 읽기 잠금을 획득하므로 테이블 잠금 암시적 커밋과 관련하여 LOCK TABLES UNLOCK TABLES 동일한 동작이 적용되지 않습니다.

 

1. UNLOCK TABLES 현재 LOCK TABLES 잠긴 테이블이있는 경우에만 모든 활성 트랜잭션을 암시 적으로 커밋합니다. FLUSH TABLES WITH READ LOCK 다음에 오는 UNLOCK TABLES 대해서는 커미트가 발생하지 않습니다. 후자는 명령문이 테이블 잠금을 획득하지 않기 때문입니다.

 

2. 트랜잭션을 시작하면 UNLOCK TABLES 실행한 것처럼 LOCK TABLES 얻은 테이블 잠금이 해제됩니다. 트랜잭션을 시작해도 FLUSH TABLES WITH READ LOCK으로 얻은 전역 읽기 잠금이 해제되지 않습니다.

 

MySQL 5.7.19 이전에는 FLUSH TABLES WITH READ LOCK XA 트랜잭션과 호환되지 않습니다.

 

읽기 잠금이있는 FLUSH 테이블은 서버가 행을 로그 테이블에 삽입하는 것을 막지 않습니다.

 

• FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK

명령문은 명명된 테이블에 대한 읽기 잠금을 비우고 획득합니다. 명령문은 먼저 테이블에 대한 독점 메타 데이터 잠금을 획득하므로 해당 테이블이 열려있는 트랜잭션이 완료될 때까지 기다립니다. 그런 다음 명령문은 테이블 캐시에서 테이블을 플러시하고 테이블을 다시 열고 LOCK TABLES ... READ 같은 테이블 잠금을 획득한 메타 데이터 잠금을 독점(exclusive)에서 공유(share) 다운 그레이드합니다. 명령문이 잠금을 획득하고 메타 데이터 잠금을 다운 그레이드한 다른 세션은 테이블을 읽을 수는 있지만 수정할 수는 없습니다.

 

명령문은 테이블 잠금을 획득하므로 FLUSH 문을 사용하는데 필요한 RELOAD 권한 외에 테이블에 대한 LOCK TABLES 권한이 있어야 합니다.

 

명령문은 기존의 기본 (TEMPORARY 아닌(non-TEMPORARY)) 테이블에만 적용됩니다. 이름이 기본 테이블을 참조하면 해당 테이블이 사용됩니다. TEMPORARY 테이블을 참조하면 무시됩니다. 이름이 뷰에 적용되면 ER_WRONG_OBJECT 오류가 발생합니다. 그렇지 않으면 ER_NO_SUCH_TABLE 오류가 발생합니다.

 

UNLOCK TABLES 사용하여 잠금을 해제하고, LOCK TABLES 사용하여 잠금을 해제하고 다른 잠금을 획득하거나, START TRANSACTION 사용하여 잠금을 해제하고 트랜잭션을 시작하십시오.

 

FLUSH TABLES 변형을 사용하면 단일 작업으로 테이블을 비우고 잠글 있습니다. 활성 LOCK TABLES ... READ가있을 FLUSH TABLES 허용되지 않는 제한 사항에 대한 임시 해결책을 제공합니다.

 

명령문은 내재된 UNLOCK TABLES 수행하지 않으므로 활성 LOCK TABLES가있는 동안 명령문을 사용하거나 먼저 획득 잠금을 해제하지 않고 명령문을 사용하면 오류가 발생합니다.

 

HANDLER 플러시 테이블을 열면 핸들러가 내재적으로 플러시되고 위치를 잃습니다.

 

• FLUSH TABLES tbl_name [, tbl_name] ... FOR EXPORT

FLUSH TABLES 변형은 InnoDB 테이블에 적용됩니다. 서버가 실행되는 동안 바이너리 테이블 사본을 작성할 있도록 명명된 테이블에 대한 변경 사항이 디스크로 플러시되도록합니다.

 

명령문은 다음과 같이 작동합니다.

1. 명명된 테이블에 대한 공유 메타 데이터 잠금을 획득합니다. 다른 세션에 해당 테이블을 수정하거나 테이블 잠금을 보유하는 활성 트랜잭션이있는 경우 명령문이 차단됩니다. 잠금이 확보되면 명령문은 테이블 업데이트를 시도하는 트랜잭션을 차단하면서 읽기 전용 조작을 계속할 있습니다.

2. 테이블의 모든 스토리지 엔진이 FOR EXPORT 지원하는지 확인합니다. 그렇지 않으면 ER_ILLEGAL_HA 오류가 발생하고 명령문이 실패합니다.

3. 명령문은 테이블의 스토리지 엔진에 테이블을 내보낼 준비가 되었음을 알립니다. 스토리지 엔진은 보류중인 변경 사항이 디스크에 기록되도록 해야 합니다.

4. 명령문은 FOR EXPORT 문이 완료될 이전에 획득한 메타 데이터 잠금이 해제되지 않도록 세션을 잠금 테이블 모드로 설정합니다.

 

FLUSH TABLES ... FOR EXPORT 문을 사용하려면 테이블에 대한 SELECT 특권이 있어야합니다. 명령문은 테이블 잠금을 획득하므로 FLUSH 문을 사용하는 필요한 RELOAD 권한 외에도 테이블에 대한 LOCK TABLES 권한이 있어야 합니다.

 

명령문은 기존의 기본 (TEMPORARY 아닌) 테이블에만 적용됩니다. 이름이 기본 테이블을 참조하면 해당 테이블이 사용됩니다. TEMPORARY 테이블을 참조하면 무시됩니다. 이름이 뷰에 적용되면 ER_WRONG_OBJECT 오류가 발생합니다. 그렇지 않으면 ER_NO_SUCH_TABLE 오류가 발생합니다.

 

InnoDB 자체 .ibd 파일 파일이있는 테이블 (, innodb_file_per_table 설정이 활성화된 테이블) 대해 FOR EXPORT 지원합니다. InnoDB FOR EXPORT 문에 의해 변경될 모든 변경 사항이 디스크로 플러시 되었음을 확인합니다. 이는 .ibd 파일이 트랜잭션 일관성을 유지하고 서버가 실행되는 동안 복사 있으므로 FOR EXPORT 문이 유효한 동안 테이블 내용의 바이너리 사본이 작성되도록 합니다. FOR EXPORT InnoDB 시스템 테이블 스페이스 파일 또는 FULLTEXT 인덱스가있는 InnoDB 테이블에는 적용되지 않습니다.

 

FLUSH TABLES ... FOR EXPORT 파티션된 InnoDB 테이블에 지원됩니다.

 

FOR EXPORT 의해 알림을 받으면 InnoDB 일반적으로 메모리 또는 테이블 공간 파일 외부의 별도 디스크 버퍼에 보관되는 특정 종류의 데이터를 디스크에 씁니다. 테이블에 대해 InnoDB 테이블과 동일한 데이터베이스 디렉토리에 table_name.cfg라는 파일을 생성합니다. .cfg 파일에는 나중에 테이블 스페이스 파일을 동일하거나 다른 서버로 다시 가져 오는 필요한 메타 데이터가 포함되어 있습니다.

 

FOR EXPORT 문이 완료되면 InnoDB 모든 더티 페이지를 테이블 데이터 파일로 플러시합니다. 모든 변경 버퍼 항목은 플러시 전에 병합됩니다. 시점에서 테이블이 잠기고 대기 상태로 됩니다. 테이블이 디스크에서 트랜잭션 적으로 일관된 상태에 있으며 해당 .cfg 파일과 함께 .ibd 테이블 공간 파일을 복사하여 해당 테이블의 일관된 스냅샷을 얻을 있습니다.

 

테이블에 대한 작업을 마친 후에는 UNLOCK TABLES 사용하여 잠금을 해제하고, LOCK TABLES 사용하여 잠금을 해제하고 다른 잠금을 획득하거나, TRANSACTION 시작하여 잠금을 해제하고 트랜잭션을 시작합니다.

 

명령문 하나라도 세션 내에서 유효하지만 FLUSH TABLES ... FOR EXPORT 사용하려고하면 오류가 발생합니다.

FLUSH TABLES ... WITH READ LOCK

FLUSH TABLES ... FOR EXPORT

LOCK TABLES ... READ

LOCK TABLES ... WRITE

 

FLUSH TABLES ... FOR EXPORT 세션 내에서 적용되는 동안 다음 명령문을 사용하려고하면 오류가 발생합니다.

FLUSH TABLES WITH READ LOCK

FLUSH TABLES ... WITH READ LOCK

FLUSH TABLES ... FOR EXPORT

'Databases > MySQL' 카테고리의 다른 글

[MySQL] Prepared 명령  (0) 2020.10.15
[MySQL] KILL 명령  (0) 2020.10.13
[MySQL] Bulk Data Loading for InnoDB Tables  (0) 2020.09.27
[MySQL] innodb_autoinc_lock_mode 환경  (0) 2020.09.24
[MySQL] Truncate Table 명령  (0) 2020.09.21

Designed by JB FACTORY