이벤트 스케줄러는 MySQL 5.1에 추가된 또 다른 새로운 기능입니다. 이는 운영 체제 작업 스케줄러로만 완료할 수 있는 일부 예약 기능을 대체하여 예약된 작업 스케줄러로 사용할 수 있습니다. 예를 들어, Linux의 crontabe는 분당 한 번씩만 정확하게 실행될 수 있는 반면, MySQL 이벤트 스케줄러는 초당 하나의 작업을 실행할 수 있어 높은 실시간 성능이 필요한 일부 환경에서 매우 실용적입니다.
이벤트 스케줄러는 정기적으로 트리거되고 실행되는 관점에서 "임시 트리거"라고도 할 수 있습니다. 트리거는 특정 테이블에서 생성된 이벤트에 대해서만 일부 명령문을 실행하는 반면, 이벤트 스케줄러는 특정(간격) 시간에 일부 명령문을 실행합니다. 이벤트는 소위 "이벤트 스케줄러"라고 불리는 특정 스레드에 의해 관리됩니다. 이벤트 스케줄러를 활성화한 후 SUPER 권한이 있는 계정은 SHOW PROCESSLIST를 실행하여 이 스레드를 볼 수 있습니다. 전역 변수 event_scheduler의 값을 설정하면 이벤트 스케줄러의 활성화 여부를 동적으로 제어할 수 있습니다.
(root:localhost:)test> SET GLOBAL event_scheduler = ON;(root:localhost:)test> show processlistG***************** ***** ********** 4. 행 ***************************Id: 46147User: event_schedulerHost : localhostdb: NULLCommand: DaemonTime: 1State: Waiting onempt queueInfo: NULL
위와 같이 이 스레드의 소유자는 event_scheduler입니다.
적용 사례
이 사례는 이벤트 스케줄러의 특성을 이용하여 SLAVE가 정상적으로 실행되고 있는지 확인하기 위해 1초마다 저장 프로시저를 호출합니다. SLAVE가 닫히고 0 오류를 무시하고 SLAVE를 다시 시작하십시오.
먼저 저장 프로시저 생성
구분자 //프로시저 `Slave_Monitor`()beginSELECT VARIABLE_VALUE INTO @SLAVE_STATUS FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME='SLAVE_RUNNING';IF ( 'ON' != @SLAVE_STATUS) THENSET GLOBAL SQL_SLAVE_SKip_COUNTER=0;SLAVE START;END IF;end; //delimiter ;
저장 프로시저가 SHOW SLAVE STATUS와 같은 것을 호출할 수 없기 때문입니다. 문으로 인해 정확한 복사 오류 정보 및 오류 코드를 얻을 수 없으며 SLAVE가 중지되는 다양한 상황을 더 이상 처리할 수 없습니다.
다음으로 작업을 생성합니다
CREATE EVENT IF NOT EXISTS `Slave_Monitor`
매 5초마다 스케줄
완료 시 PRESERVE
DO
CALL Slave_Monitor();
작업을 생성하고 5초마다 실행하지만 작업은 대신 유지됩니다. 삭제되었습니다. 물론 이 예의 작업은 수동으로 비활성화하지 않는 한 종료되지 않습니다.
작업 중에 작업을 일시적으로 닫으려면 ALTER EVENT 문을 실행하세요.
(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE DISABLE;
(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE ENABLE;
그게 다입니다. MySQL 이벤트 스케줄러 이벤트 스케줄러에 대한 설명, 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트(www.php.cn)를 주목하세요!