mysql定时器 时间可以使变量吗_Mysql定时器创建表,支持表名变量创建

业务场景:预测文章发布数据量非常大,为了性能上的考虑,决定按月分表存储文章数据,需要用到定时器+存储过程

1、先编写存储过程, 使用delimiter重新定义语句分隔符,标明以下是一条整体语句

delimiter //

DROP PROCEDURE IF EXISTS create_table_like_info; -- 删除存储过程

CREATE PROCEDURE create_table_like_info()

BEGIN

DECLARE tbname VARCHAR(50);

SET tbName = CONCAT('xny_sem_info_', date_format(now(), "%Y%m")); -- 定义表名

SET @stmt := CONCAT("CREATE TABLE IF NOT EXISTS ", tbName, " LIKE

xny_sem_info"); // 以原表作为新表的创建模板,eg:xny_sem_info_202004

PREPARE STMT FROM @stmt; # 预处理语句

EXECUTE STMT;

END;

//

2、创建定时器

DROP EVENT IF EXISTS crontab_create_info_event;

CREATE EVENT IF NOT EXISTS crontab_create_info_event -- 创建一个事件

on schedule every 1 day -- 设置每1天执行一次(这里有待改善)

ON completion preserve

DO CALL create_table_like_info();

3、创建的定时器事件默认是关闭状态,需要执行命令开启事件

ALTER EVENT crontab_create_info_event ON COMPLETION PRESERVE ENABLE;

4、检查mysql是否开启定时器

SHOW VARIABLES LIKE '%sche%'; -- event_scheduler 为1或者ON表示已开启

SET GLOBAL event_scheduler = 1; -- 启动定时器(设置开机自启动,找到etc/my.cnf 打开 在[mysqld]底下添加 event_scheduler = 1)

5、其他命令

ALTER EVENT crontab_create_info_event ON COMPLETION PRESERVE DISABLE; -- 关闭事件

DROP PROCEDURE createTableLikeInfo; -- 删除存储过程

SHOW VARIABLES LIKE '%sche%'; -- 查看是否启用定时器

SET GLOBAL event_scheduler = 1; -- 启动定时器

SET GLOBAL event_scheduler = 0; -- 停止定时器

SHOW EVENTS; -- 查看已创建的定时器

SHOW PROCEDURE STATUS; -- 查看已创建的存储过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值