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는 슬로우 쿼리 로그 파일을 닫고 다시 엽니 다.
PRIVILEGESmysql데이터베이스의 부여 테이블에서 권한을 다시로드합니다.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 "질문이나 버그를보고하는 방법" 을 참조하십시오.TABLESFLUSH 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 TABLEStbl_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 TABLEStbl_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 TABLEStbl_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