知乎專欄 | 多維度架構 |
set GLOBAL event_scheduler=ON;
my.cnf 配置
event_scheduler=on
查看狀態
mysql> select @@GLOBAL.event_scheduler; +--------------------------+ | @@GLOBAL.event_scheduler | +--------------------------+ | ON | +--------------------------+ 1 row in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'event_scheduler'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | ON | +-----------------+-------+ 1 row in set (0.01 sec)
DROP EVENT IF EXISTS `captcha`; DELIMITER // CREATE DEFINER=`neo`@`%` EVENT `captcha` ON SCHEDULE EVERY 5 MINUTE STARTS '2013-07-08 16:27:03' ON COMPLETION PRESERVE ENABLE DO BEGIN delete from captcha where ctime < DATE_ADD(now(), INTERVAL -5 MINUTE); END// DELIMITER ;
mysql> show events; +--------+-------------+---------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+ | Db | Name | Definer | Time zone | Type | Execute at | Interval value | Interval field | Starts | Ends | Status | Originator | character_set_client | collation_connection | Database Collation | +--------+-------------+---------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+ | netkiller | captcha | neo@% | SYSTEM | RECURRING | NULL | 5 | MINUTE | 2013-07-08 16:27:03 | NULL | ENABLED | 1 | utf8 | utf8_general_ci | utf8_general_ci | | netkiller | sms_ips_log | neo@% | SYSTEM | RECURRING | NULL | '0 5' | DAY_HOUR | 2013-07-09 14:39:51 | NULL | ENABLED | 1 | utf8 | utf8_general_ci | utf8_general_ci | +--------+-------------+---------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+ 2 rows in set (0.00 sec) mysql> show events \G; *************************** 1. row *************************** Db: netkiller Name: captcha Definer: neo@% Time zone: SYSTEM Type: RECURRING Execute at: NULL Interval value: 5 Interval field: MINUTE Starts: 2013-07-08 16:27:03 Ends: NULL Status: ENABLED Originator: 1 character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: utf8_general_ci *************************** 2. row *************************** Db: netkiller Name: sms_ips_log Definer: neo@% Time zone: SYSTEM Type: RECURRING Execute at: NULL Interval value: '0 5' Interval field: DAY_HOUR Starts: 2013-07-09 14:39:51 Ends: NULL Status: ENABLED Originator: 1 character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: utf8_general_ci 2 rows in set (0.00 sec) ERROR: No query specified
每月創建一張新表,適用於分表的場景
CREATE DEFINER=`neo`@`netkiller` EVENT `logging` ON SCHEDULE EVERY 1 MONTH STARTS '2017-12-11 15:51:00' ON COMPLETION PRESERVE ENABLE COMMENT '每月自動創建表' DO BEGIN declare _table_date varchar(10); select date_format(date_add(curdate(),interval 1 month),'%Y%m') into _table_date; call logging(_table_date); END
CREATE DEFINER=`neo`@`netkiller` PROCEDURE `logging`( IN `table_date` VARCHAR(10) ) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN set @_table_name = CONCAT('log_',table_date); set @_create = "CREATE TABLE If Not Exists "; set @_param = "( `id` INT(11) NOT NULL AUTO_INCREMENT, `type` VARCHAR(255) NULL DEFAULT NULL COMMENT '日誌類型 1:網站 2:IOS 3:Android', `url` VARCHAR(640) NULL DEFAULT NULL COMMENT '用戶訪問url', `serverIp` VARCHAR(255) NULL DEFAULT NULL COMMENT '伺服器ip', `bodyBytesSent` VARCHAR(255) NULL DEFAULT NULL, `bytesSent` VARCHAR(255) NULL DEFAULT NULL COMMENT '參數位元組數', `browser` VARCHAR(255) NULL DEFAULT NULL COMMENT '瀏覽器信息', `ctime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `mtime` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), INDEX `ctime` (`ctime`, `deviceType`,`isFirst`), INDEX `userIp` (`userIp`), INDEX `deviceId` (`deviceId`), INDEX `account` (`account`) ) COMMENT='APP 訪問記錄' COLLATE='utf8_general_ci' ENGINE=InnoDB ;"; SET @sql = CONCAT(@_create,@_table_name,@_param); PREPARE stmt FROM @sql; EXECUTE stmt; Deallocate prepare stmt; END