查看是否开启事件调度器
只有开启事件调度器才能使用事件调度器实现定时任务(如linux的cron)
1.查看是否开启事件调度器:
方式一:
SELECT @@event_scheduler;
方式二:
SHOW VARIABLES LIKE 'event_scheduler'; #没有开启则无法启用定时器(0代表:off,1代表:on)
#若未开启则执行
SET GLOBAL event_scheduler = ON; #开启定时器
#永久开启,在 MySQL 的配置文件中(通常是 my.cnf 或 my.ini)设置
event_scheduler=ON 来永久开启
创建事件
-- 注意:事件中不允许锁表!!!!!!!
-- 先删除事件
DROP EVENT IF EXISTS log_bak;
-- 创建事件
CREATE EVENT `log_bak` -- 创建名字为user_event的事件
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) -- 每隔一天执行一次,开始执行时间为明天凌晨1点整
ENABLE
DO call log_data_bak();
创建存储过程
对于数据量小的情况下可以直接使用以下脚本,数据量大不建议使用如下方式
-- 先删除存储过程
DROP PROCEDURE IF EXISTS log_bak;
-- 创建存储过程
create procedure log_bak()
begin
#清空备份表
truncate table table_log_old;
#备份源表
insert into table_log_old select * from table_log;
end
-- 测试存储过程是否正确
call log_data_bak()
对于数据量大的情况可以使用修改表名的方式实现备份
-- 先删除存储过程
DROP PROCEDURE IF EXISTS log_bak;
-- 创建存储过程
create procedure log_bak()
begin
rename table table_log to table_log_old;
create table table_log like table_log_old;
end
-- 测试存储过程是否正确
call log_data_bak()