13.7.6.3 FLUSH 구문
FLUSH [NO_WRITE_TO_BINLOG | LOCAL]flush_option
[,flush_option
] ...
FLUSH
문은 다양한 내부 캐시를 지우거나 다시로드하거나 테이블을 플러시하거나 잠금을 획득 할 몇 가지 변형 형태가 있습니다. FLUSH
를 실행하려면 RELOAD
권한이 필요합니다. 나중에 설명 된 것처럼 특정 플래시 옵션에는 추가 권한이 필요할 수 있습니다.
기본적으로 서버는 FLUSH
문을 바이너리 로그에 기록하고 또 리플리케이션 슬레이브에 복제되도록합니다. 로깅을하지 않으려면 옵션의 NO_WRITE_TO_BINLOG
키워드 또는 별칭 LOCAL
을 지정합니다.
FLUSH LOGS
, FLUSH TABLES WITH READ LOCK
(테이블 목록 포함 또는 없음) 및 FLUSH TABLES
는 슬레이브에 복제되는 문제가 발생하기 때문에 어떤 경우에도 바이너리 로그에 기록됩니다 없습니다. tbl_name
... FOR EXPORT
SIGHUP
신호를 서버에 전송하면 다양한 형식의 FLUSH
명령문을 닮은 일부 플래시 동작이 발생합니다. 섹션 5.1.11 "신호에 대한 서버 응답" 을 참조하십시오.
FLUSH
문은 암시 적 커밋을 발생시킵니다. 섹션 13.3.3 "암시 적 커밋을 발생시키는 문" 을 참조하십시오.
RESET
문 FLUSH
와 비슷합니다. 복제의 RESET
문 사용에 대해서는 섹션 13.7.6.6 "RESET 구문" 을 참조하십시오.
flush_option
다음 중 하나의 항목을 지정할 수 있습니다.
DES_KEY_FILE
서버 시작시
--des-key-file
옵션으로 지정된 파일에서 DES 키를 다시로드합니다.HOSTS
호스트 캐시를 비 웁니다. 호스트 캐시는 일부 호스트가 IP 주소를 변경하거나
Host '
이라는 에러 메시지가 표시된 경우 플래시하도록하십시오. ( 섹션 B.5.2.6 '호스트'host_name '거부되었습니다 " 를 참조하십시오.) MySQL 서버에 연결하는 동안 특정 호스트에host_name
' is blockedmax_connect_errors
개 이상의 오류가 연속해서 발생하면 MySQL 뭔가 문제가 있다고 간주하고 호스트를 추가 연결 요청에서 차단합니다. 호스트 캐시를 플러시하면 호스트에서 추가 연결 시도 할 수 있습니다.max_connect_errors
의 기본값은 10입니다. 이 오류 메시지를 해결하려면max_connect_errors
가 큰 값으로 설정된 상태에서 서버를 시작합니다.[
log_type
] LOGSlog_type
옵션을 지정하지 않는 경우,FLUSH LOGS
모든 로그 파일을 닫고 다시 엽니 다. 바이너리 로깅이 활성화되어있는 경우, 바이너리 로그 파일의 시퀀스 번호가 이전 파일을 기준으로 1 증가됩니다.log_type
옵션을 지정하면 지정된 로그 유형 만 플래시됩니다. 다음log_type
옵션이 허용됩니다.BINARY
는 바이너리 로그 파일을 닫고 다시 엽니 다.ENGINE
설치되어있는 스토리지 엔진 플래시 가능한 로그를 닫고 다시 엽니 다. 현재 이것은InnoDB
는 로그를 디스크로 플러시합니다.ERROR
는 오류 로그 파일을 닫고 다시 엽니 다.GENERAL
은 일반적인 쿼리 로그 파일을 닫고 다시 엽니 다.RELAY
는 릴레이 로그 파일을 닫고 다시 엽니 다.SLOW
는 슬로우 쿼리 로그 파일을 닫고 다시 엽니 다.
PRIVILEGES
mysql
데이터베이스의 부여 테이블에서 권한을 다시로드합니다.GRANT
,CREATE USER
,CREATE SERVER
및INSTALL PLUGIN
명령문의 결과로 서버 정보를 메모리에 캐시합니다. 이 메모리는 해당REVOKE
,DROP USER
,DROP SERVER
및UNINSTALL PLUGIN
문에 의해 해제되지 않으므로 캐시를 발생시키는 문 다수의 인스턴스를 실행하는 서버에서는 메모리 사용량이 증가합니다. 이 캐시 된 메모리는FLUSH PRIVILEGES
에서 해제 할 수 있습니다.QUERY CACHE
쿼리 캐시를 조각하고 그 메모리를보다 효율적으로 사용합니다.
FLUSH QUERY CACHE
는FLUSH TABLES
와RESET QUERY CACHE
과는 달리 캐시에서 쿼리를 삭제하지 않습니다.STATUS
이 옵션은 현재 스레드의 세션 상태 변수 값을 글로벌 값에 추가 세션 값을 0으로 재설정합니다. 일부 글로벌 변수도 0으로 재설정 될 수 있습니다. 또한 (기본 및 지정된) 키 캐시의 카운터를 0으로 재설정하고
Max_used_connections
을 열려있는 연결의 현재 값으로 설정합니다. 이것은 쿼리를 디버깅하는 경우에만 사용하도록하십시오. 섹션 1.7 "질문이나 버그를보고하는 방법" 을 참조하십시오.TABLES
FLUSH TABLES
테이블을 플래시 해, 사용되는 변형에 따라 잠금을 가져옵니다. 허용되는 구문은이 섹션의 나머지 부분에서 설명되어 있습니다.USER_RESOURCES
시간당 모든 사용자 자원을 0으로 재설정합니다. 그러면 시간당 연결, 쿼리, 또는 업데이트 제한에 도달 한 클라이언트가 즉시 활동을 재개 할 수 있습니다.
FLUSH USER_RESOURCES
는 최대 동시 접속에 대한 제한은 적용되지 않습니다. 섹션 6.3.4 "계정 자원 제한 설정" 을 참조하십시오.
mysqladmin 유틸리티는 flush-hosts
, flush-logs
, flush-privileges
, flush-status
, flush-tables
등의 명령을 사용하여 일부 플래시 작업에 대한 명령 줄 인터페이스를 제공합니다. 섹션 4.5.2 "mysqladmin - MySQL 서버를 관리하는 클라이언트" 를 참조하십시오.
스토어드 함수 또는 트리거 내에서 FLUSH
문을 발행 할 수 없습니다. 그러나 저장 프로 시저에서는 그것이 스토어드 함수 또는 트리거에서 호출되지 않는 한, FLUSH
를 사용할 수 있습니다. 섹션 D.1 "저장 프로그램 제한 사항" 을 참조하십시오.
MySQL 5.6.11에서만이 문을 발행하기 전에 gtid_next
를 AUTOMATIC
으로 설정해야합니다. (Bug # 16062608, Bug # 16715809, Bug # 69045)
FLUSH TABLES 구문
FLUSH TABLES
는 다음에 설명되어있는 몇 가지 형식이 있습니다. TABLES
옵션 중 하나 변형이 FLUSH
문에서 사용되는 경우는 그것이 사용되는 유일한 옵션이어야합니다. FLUSH TABLES
는 FLUSH TABLES
의 동의어입니다.
FLUSH TABLES
열려있는 모든 테이블을 닫고 사용되는 모든 테이블을 강제로 닫고 쿼리 캐시를 플러시합니다.
FLUSH TABLES
또한RESET QUERY CACHE
문처럼 쿼리 캐시에서 모든 쿼리 결과를 삭제합니다.MySQL 5.6에서는 활성
LOCK TABLES ... READ
가 존재하는 경우,FLUSH TABLES
는 허용되지 않습니다. 테이블을 플러시하고 잠 그려면 대신FLUSH TABLES
을 사용합니다.tbl_name
... WITH READ LOCKFLUSH TABLES
tbl_name
[,tbl_name
] ...쉼표로 구분 된 하나 이상의 테이블 이름 목록을 지정한 경우,이 문은 서버가 지정된 테이블 만 플래시한다는 점을 제외하고는 이름없는
FLUSH TABLES
와 비슷합니다. 지정된 테이블이 존재하지 않는 경우 오류가 발생하지 않습니다.FLUSH TABLES WITH READ LOCK
열려있는 모든 테이블을 닫고 글로벌 읽기 잠금을 보유하고있는 모든 데이터베이스의 모든 테이블을 잠급니다. 이것은 특정 시점의 스냅 샷을 할 수있는 Veritas 또는 ZFS 등의 파일 시스템이있는 경우에는 백업을 얻을 수있는 매우 유용한 방법입니다. 이 잠금을 해제하려면
UNLOCK TABLES
를 사용합니다.FLUSH TABLES WITH READ LOCK
은 글로벌 읽기 잠금을 가져 오지만 테이블 잠금은 검색하지 않기 때문에 테이블 잠금과 암묵적인 위탁에 관해서LOCK TABLES
와UNLOCK TABLES
와 같은 동작을 따르지 않습니다.UNLOCK TABLES
는 현재LOCK TABLES
에 잠겨있는 테이블이있는 경우에만 활성 트랜잭션을 암시 적으로 커밋합니다.FLUSH TABLES WITH READ LOCK
은 테이블 락을 취득하지 않기 때문에이 문 다음UNLOCK TABLES
에 커미트가 없습니다.트랜잭션을 시작하면 사용자가
UNLOCK TABLES
를 실행 한 것처럼,LOCK TABLES
에 의해 취득 된 테이블 잠금이 해제됩니다. 트랜잭션을 시작하고도FLUSH TABLES WITH READ LOCK
의해 취득 된 글로벌 읽기 잠금이 해제되지 않습니다.
FLUSH TABLES WITH READ LOCK
에서는 서버가 로그 테이블에 행을 삽입하지 못하는 것은 아닙니다 ( 섹션 5.2.1 "일반 쿼리 로그와 슬로우 쿼리 로그 대상 선택" 을 참조하십시오).FLUSH TABLES
tbl_name
[,tbl_name
] ... WITH READ LOCK이 문은 지정된 테이블을 플러시하고 그에 대한 읽기 잠금을 획득합니다. 이 문은 먼저 테이블에 대한 배타적 인 메타 데이터 잠금을 얻기 위해 이러한 테이블을 열려있는 트랜잭션의 완료를 기다립니다. 그런 다음이 문은 테이블 캐시 테이블을 비우고 테이블을 다시 열고 (
LOCK TABLES ... READ
와 마찬가지로) 테이블 잠금을 획득 한 뒤, 메타 데이터 잠금을 독점에서 공유로 다운 그레이드 합니다. 이 문이 잠금을 획득하고 메타 데이터 잠금 다운 그레이드하면 다른 세션은 그 테이블을 읽을 수 있지만 수정할 수 없습니다.이 문은 테이블 락을 취득하기 위해 하나의
FLUSH
문을 사용하는 데 필요한RELOAD
권한 이외에 각 테이블에 대한LOCK TABLES
권한이 필요합니다.이 문은 기존의 기본 테이블에만 적용됩니다. 이름이 기본 테이블을 참조하는 경우 해당 테이블이 사용됩니다.
TEMPORARY
테이블을 참조하는 경우, 그 이름은 무시됩니다. 이름이 뷰에 적용되는 경우ER_WRONG_OBJECT
오류가 발생합니다. 그렇지 않으면ER_NO_SUCH_TABLE
오류가 발생합니다.잠금을 해제하려면
UNLOCK TABLES
를 잠금을 해제하고 다른 잠금을 얻으려면LOCK TABLES
를하거나 잠금을 해제하고 새로운 트랜잭션을 시작하려면START TRANSACTION
을 사용합니다.FLUSH
이 변형을 사용하면 테이블의 플래시와 락을 하나의 조작으로 실행할 수 있습니다. 이로 인해 활성LOCK TABLES ... READ
가 있으면FLUSH TABLES
가 허용되지 않는다는 MySQL 5.6으로 제한 해결 방법이 제공됩니다.이 문장은 암시적인
UNLOCK TABLES
를 실행하지 않기 때문에이 문을 활성LOCK TABLES
이 존재하는 동안 사용하거나 획득 한 잠금을 먼저 해제하지 않고 다시 사용하거나하면 오류가 발생합니다 .플래시 된 테이블이
HANDLER
에서 열린 경우, 그 핸들러는 암묵적으로 플래시되어 그 위치를 잃게됩니다.FLUSH TABLES
tbl_name
[,tbl_name
] ... FOR EXPORT이
FLUSH TABLES
변형은InnoDB
테이블에 적용됩니다. 이것은 MySQL 5.6.6의 시점에서 사용할 수 있습니다. 이 문은 서버 가동 중에 바이너리 테이블의 복사본 수 있도록 명명 된 테이블에 대한 변경을 디스크로 플러시합니다.이 문장은 다음과 같이 작동합니다.
지정된 테이블에 대한 공유 메타 데이터 잠금을 가져옵니다. 이러한 테이블을 변경했거나 그에 대한 테이블 잠금을 보유하는 활성 트랜잭션이 다른 세션에 존재하는 한,이 문은 차단됩니다. 락이 취득되면이 문은이 테이블을 업데이트하려는 트랜잭션을 차단하는 동안 읽기 전용 작업을 계속할 수 있도록합니다.
이 테이블의 모든 스토리지 엔진이
FOR EXPORT
를 지원하는지 여부를 확인합니다. 지원하지 않는 것이 있다면,ER_ILLEGAL_HA
오류가 발생하여이 문은 실패합니다.이 문은 각 테이블의 스토리지 엔진에 테이블을 내보내기 위해 준비하도록 통지합니다. 스토리지 엔진은 보류중인 변경 내용이 모든 디스크에 쓰여지도록해야합니다.
이 문은
FOR EXPORT
문이 완료되면 이전에 취득 된 메타 데이터 잠금이 해제되지 않도록 해당 세션을 테이블 잠금 모드로합니다.
FLUSH TABLES ... FOR EXPORT
문에는 각 테이블에 대한SELECT
권한이 필요합니다. 이 문은 테이블 락을 취득하기 위해 하나의FLUSH
문을 사용하는 데 필요한RELOAD
권한 이외에 각 테이블에 대한LOCK TABLES
권한도 필요합니다.이 문은 기존의 기본 테이블에만 적용됩니다. 이름이 기본 테이블을 참조하는 경우 해당 테이블이 사용됩니다.
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
는 MySQL 5.6.17 이전의 분할 된InnoDB
테이블에서는 작동하지 않지만, MySQL 5.6.17 이후에서는 이러한 테이블에 대해서도 지원됩니다. (Bug # 16943907).FOR EXPORT
에서 통지되면,InnoDB
는 일반적으로 메모리 또는 테이블 공간 파일의 외부에있는 별도의 디스크 버퍼에 유지되는 특정 유형의 데이터를 디스크에 기록합니다.InnoDB
는 또한 테이블마다 테이블과 같은 데이터베이스 디렉토리에
라는 파일을 생성합니다.table_name
.cfg.cfg
파일은 나중에 테이블 스페이스 파일을 동일한 서버 또는 다른 서버로 다시 가져 오는 데 필요한 메타 데이터가 포함되어 있습니다.FOR EXPORT
문이 완료되면InnoDB
에 의해 모든 더티 페이지 가 테이블 데이터 파일에 플래시되어 있습니다. 변경 버퍼 엔트리는 모두 플래시 전에 병합됩니다. 이 시점에서 테이블은 잠겨 정지합니다. 이 테이블은 디스크에서 트랜잭션으로 일관성있는 상태에 있기 때문에.ibd
테이블 공간 파일을 지원하는.cfg
파일과 함께 복사하여 이러한 테이블의 일관된 스냅 샷을 만들 수 있습니다 .복사 된 테이블 데이터를 MySQL 인스턴스로 다시 가져올 자세한 내용은 섹션 14.5.5 "테이블 공간의 다른 서버로 복사 (이동 가능한 테이블 스페이스)" 를 참조하십시오.
테이블의 처리를 완료 한 후 잠금을 해제하려면
UNLOCK TABLES
를 잠금을 해제하고 다른 잠금을 얻으려면LOCK TABLES
를하거나 잠금을 해제하고 새로운 트랜잭션을 시작하려면START 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