日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用MySQL定时任务 动态增加分区

發布時間:2023/12/31 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用MySQL定时任务 动态增加分区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、查看定時策略是否開啟

show variables like '%event_sche%';
  • 開啟定時策略:
set global event_scheduler = on;

二、創建存儲過程

  • 增加分區表存儲過程
  • t_name 傳入增加分區的數據表
CREATE DEFINER=`test`@`%` PROCEDURE `p_partition_month`(in t_name VARCHAR(50)) BEGINDECLARE v_sysdate DATE;DECLARE v_maxdate DATETIME;DECLARE v_pt VARCHAR(20);DECLARE v_maxval int;DECLARE add_sql VARCHAR(256); SELECT MAX(CAST(FROM_DAYS(REPLACE(partition_description,'''','')) AS DATE)) AS val INTO v_maxdate FROM information_schema.`PARTITIONS` WHERE table_name = t_name;SET v_sysdate = SYSDATE();select v_maxdate,v_maxdate+ INTERVAL 1 MONTH;# WHILE v_maxdate<(v_sysdate+INTERVAL 1 MONTH) DOSET v_pt = DATE_FORMAT(v_maxdate, '%Y%m%d');SET v_maxval=TO_DAYS(v_maxdate+ INTERVAL 1 MONTH);SET add_sql = CONCAT('alter table ', t_name,' add partition (partition p', v_pt, ' values less than(',v_maxval,'))');SET @sql=add_sql; #存儲于會話變量PREPARE stmt FROM @sql; EXECUTE stmt;DEALLOCATE PREPARE stmt; SET v_maxdate = v_maxdate + INTERVAL 1 MONTH;END WHILE; END

三、創建定時任務

  • 創建(任務名e_partition)定時任務事件,每月月底 23 點執行存儲過程
CREATE EVENT e_partition ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(last_day(curdate()), INTERVAL 1 MONTH),INTERVAL 23 HOUR) ON COMPLETION PRESERVE ENABLE DO CALL p_partition_month();
  • 刪除定時事件
drop event e_partition;

四、定時任務相關操作

  • 查看
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;
  • 開啟
alter event run_event on completion preserve enable;
  • 關閉
alter event run_event on completion preserve disable;

五、定時規則

  • 周期執行(EVERY)
    單位有:second、minute、hour、day、week(周)、quarter(季度)、month、year
    on schedule every 1 month//每月執行1次

  • 在具體某個時間執行(AT)
    on schedule at current_timestamp()+interval 5 day //5天后執行
    on schedule at ‘2023-01-01 00:00:00’ //在2023年1月1日,0點整執行

  • 在某個時間段執行(STARTS ENDS)
    on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后開始每天都執行執行到下個月底
    on schedule every 1 day ends current_timestamp()+interval 5 day //從現在起每天執行,執行5天

六、擴展

1、分區操作

  • 創建分區
ALTER TABLE `qfyu_chat` PARTITION BY RANGE(TO_DAYS(create_time)) (PARTITION p20221101 VALUES LESS THAN (TO_DAYS('2022-12-01')) ENGINE = INNODB,PARTITION p20221201 VALUES LESS THAN (TO_DAYS('2023-01-01')) ENGINE = INNODB, );
  • 修改分區
alter table qfyu_chatadd partition (partition p20221101 values less than(738641))
  • 刪除分區(包含數據)
alter table qfyu_chat drop partition p20221101

2、常用 mysql 日期函數

SELECT DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY); #當月1號select last_day(curdate());#當月月底最后一天select DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH); #下月1號select DATE_ADD(last_day(curdate()), INTERVAL 1 MONTH); #下月1號SELECT DATE_ADD(DATE_ADD(last_day(curdate()), INTERVAL 1 MONTH),INTERVAL 23 HOUR);#下月月底

總結

以上是生活随笔為你收集整理的使用MySQL定时任务 动态增加分区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。