以下功能主要供学习。高并发场景不要使用mysql特性(触发器,存储过程,外键,自定义函数等)使用会降低系统的并发性,数据库升级困难,迁移困难诸多问题。
MySQL从5.1开始支持event功能,有了这个功能之后我们就可以让MySQL自动的执行数据汇总等功能,不用像以前需要操作的支持了。如linux crontab功能
一、背景
我们MySQL的表A的数据量已经达到1.6亿,由于一些历史原因,需要把表A的数据转移到一个新表B,但是因为这是线上产品,所以宕机时间需要尽量的短,在不影响数据持续入库的情况下,我希望能通过作业(定时器Events)的形式慢慢搬迁这些数据。
二、使用过程
(一) 查看当前是否已开启事件计划(调度器)有3种方法:
1) SHOW VARIABLES LIKE 'event_scheduler';
2) SELECT @@event_scheduler;
3) SHOW PROCESSLIST;
(二) 开启事件计划(调度器)开关有4种方法:
1) SET GLOBAL event_scheduler = 1;
2) SET @@global.event_scheduler = 1;
3) SET GLOBAL event_scheduler = ON;
4) SET @@global.event_scheduler = ON;
键值1或者ON表示开启;0或者OFF表示关闭;
(三) 关于事件计划的权限:
单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权 限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。(FLUSH PRIVILEGES;)
当event和procedure配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。
SELECT HOST,USER,Event_priv FROM mysql.user;
获取当前登陆的用户和数据库:SELECT CURRENT_USER(), SCHEMA();
从Figure1可以知道bfsql@%是没有Event_priv权限的,在该用户下创建事件的时候会出现下面的错误:
Error Code: 1044Access denied for user 'bfsql'@'%' to database 'blog'
如果出现上面的错误,执行下面的SQL就可以给bfsql@%赋予创建Event的权限:
UPDATE mysql.user SET Event_priv = 'Y' WHERE HOST='%' AND USER='bfsql'; FLUSH PRIVILEGES;
最后,你可以通过SHOW GRANTS FOR 'bfsql'@'%';查看所有权限;
(四) 创建事件:
1) 创建事件的语法如下:
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement
2) 创建事件的示例如下:
DELIMITER $$
CREATE EVENT IF NOT EXISTS e_blog
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO BEGIN
CALL MoveBlogData();
END$$
DELIMITER ;
DO sql_statement字段表示该event需要执行的SQL语句或存储过程。这里的SQL语句可以是复合语句,使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。
--从现在开始每隔九天定时执行 CREATE EVENT EVENT1 ON SCHEDULE EVERY 9 DAY STARTS NOW() ON COMPLETION PRESERVE ENABLE DO BEGIN CALL TOTAL(); END --每个月的一号凌晨1 点执行 CREATE EVENT EVENT2 ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL STAT(); END ---每个季度一号的凌晨2点执行 CREATE EVENT TOTAL_SEASON_EVENT ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL SEASON_STAT(); END --每年1月1号凌晨四点执行 CREATE EVENT TOTAL_YEAR_EVENT ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL YEAR_STAT(); END
(五) 事件开启与关闭:
开启某事件:ALTER EVENT e_test ON COMPLETION PRESERVE ENABLE;
关闭某事件:ALTER EVENT e_test ON COMPLETION PRESERVE DISABLE;
三、其它知识点
对于我们线上环境来说,使用event时,注意在主库上开启定时器,从库上关闭定时器,event触发所有操作均会记录binlog进行主从同步,从库上开启定时器很可能造成卡库。切换主库后之后记得将新主库上的定时器打开。
相关推荐
针对“Mysql定时器清空3天以前的数据”的主题,我们将深入探讨如何在MySQL数据库中设置定时任务,以便自动删除3天前的数据。这通常涉及到两个主要概念:事件调度器(Event Scheduler)和SQL语句来清除数据。 首先,...
MySQL定时器EVENT是一种非常实用的功能,它允许数据库管理员在预设的时间执行特定的任务,比如定期备份、清理过期数据或执行维护操作。在MySQL中,EVENTs被设计为数据库级别的对象,可以在不需要用户干预的情况下...
定时器(Scheduler Events)** - **定义**: 定时器用于安排在特定时间运行的任务或事件。 - **创建定时器**: `create event 事件名 on schedule at '2023-09-01 12:00:00' do begin ... end;` - **定时器用途**: ...
FROM information_schema.EVENTS; ``` 启用或禁用已创建的事件,可以使用以下命令: ```sql ALTER EVENT event_name ON COMPLETION PRESERVE ENABLE; // 开启定时任务 ALTER EVENT event_name ON COMPLETION ...
MySQL中的Event是数据库管理系统提供的一种时间触发机制,它允许用户安排一次或定期执行SQL语句或存储过程。从MySQL 5.1版本开始引入,Event主要用于处理那些需要按时间规律执行的任务,比如定期备份、清理过期数据...
在Linux环境下,实现MySQL定时任务通常有两种方法:一种是通过MySQL自身的Event Scheduler,另一种是利用Linux的cron定时器。这两种方式各有特点,可以根据实际需求和环境选择合适的方法。 一、MySQL Event ...
MySQL中的事件调度器(Event Scheduler)是一个强大的工具,它允许用户创建定时任务,这些任务可以在预设的时间点执行或者按照固定的间隔重复执行。这个功能自MySQL 5.1.6版本开始引入,为数据库管理和自动化提供了极...
1. 事件(Events):在数据库系统中,事件是一种定时器,可以按照预定的时间间隔或特定时间点执行任务。在MySQL中,创建事件的语法并不包括`DELETE EVENT`,而是`DROP EVENT`来删除事件。事件可以独立于特定数据表,...
Highcharts是一款强大的JavaScript图表库,它能够帮助开发者创建各种类型的互动图表,如折线图、柱状图、...- 考虑使用WebSockets或Server-Sent Events(SSE)等技术,实现即时双向通信,进一步提升动态更新的效率。
CS中可能使用定时器(Timer)来定期触发这些任务,例如清理过期的Session数据或发送提醒邮件等。 ### 七、MemberRole之Membership **Membership**是.NET框架提供的用户身份验证机制,它提供了一组API用于用户账户的...
9. **QTimer和定时器事件(QTimer and Timer Events)**:定时器允许你在特定时间间隔执行任务,比如更新UI或执行后台工作。 10. **QWebView和QWebEngineView**:用于在应用程序中嵌入网页内容,QWebView基于旧的...
- **定时器**:探讨 Node.js 中定时器的实现方式及其异步特性。 #### 六、异步编程 - **回调函数**:介绍传统的异步处理方式——回调函数。 - **Promise 对象**:演示如何使用 Promise 对象来处理异步操作。 - **...
2. **同学生日显示**:系统需要存储并管理用户的生日信息,可能使用数据库(如MySQL或MongoDB)来存储这些数据,并设置定时任务(如Cron Job)在用户生日时触发提醒。此外,前端展示可能涉及时间格式化和日历组件的...
免刷新的实现通常依赖于JavaScript的定时器(如`setInterval`函数)来定期向服务器请求新的消息,或者利用WebSocket或Server-Sent Events (SSE)等技术实现实时双向通信。 【标签】"PHP":PHP是一种广泛使用的开源...
如果需要实时更新跟踪信息,可以使用WebSocket或Server-Sent Events (SSE)技术,使服务器能够主动推送给Vue前端最新的跟踪数据。 7. **数据分析和报表**: 通过聚合和分析收集到的数据,生成有意义的报表。可以...