🔥
Caster 開發日誌
  • Java
    • JVM Performance Tool
      • Java Debug Wire Protocol (JDWP) 的詳細介紹
      • JConsole 詳細介紹
    • Spring Boot
      • Spring Security
      • Spring Boot Admin
      • Spring Event
      • Spring AOP
      • Spring Boot JUnit 5
      • Apache Dubbo
    • Reflect 應用
    • ELK + F 建構
    • Socket.IO
    • OCR - 光學字元辨識
    • 讀取JAR resource文件
    • LocalTime & MySQL時間精度
    • Gradle multi module
    • MyBatis-Plus
    • Java Date operation
    • Java IP to Long
    • Apache Commons lang3 應用
      • Function 應用
    • Cloud Platform
      • Amazon S3
        • SDK V1
          • Bucket
        • SDK V2
          • Bucket
      • Google Cloud Platform
      • Azure Cloud
        • Storage
      • OVHcloud
        • Config
    • SSL/TLS工具
    • Util 工具
      • Jackson Json工具
      • Charles應用
      • JMeter – Performing Distributed Load Testing with Docker
    • Redis
      • Stream
      • Redisson 分布式鎖機制
      • Create Redis Cluster Using Docker
      • List Operations
    • Java 8
      • method & constructor Reference
      • CompletableFuture
      • FunctionInterface
      • Stream 應用
      • 繁簡轉換 - 簡易調整
    • MySQL
      • 建立測試用 流水號Table
      • SQL 效能調校 - Explain
      • SQL 效能調校 - Partition
      • 排程 - Event
    • Apache ShardingSphere
  • Kubernetes
    • 初入江湖(K8S)
    • 零中斷服務滾動更新
    • Kubernetes DNS
    • Ingress & Ingress Controller 教學
    • Ingress TLS Easy setup
  • 指令集
  • Telegram
  • SourceTree
    • 踩坑紀錄(ㄧ) - Git Flow
    • 踩坑紀錄(二) - 修改檔名
  • 專案統計
    • Robot
    • Recharge
  • GitHub
    • Actions
  • GitLab
    • 介紹 GitLab
    • 使用 Docker 自架 GitLab
    • 簡介 GitLab CI/CD
      • GitLab Runner 詳細介紹與設定方式
Powered by GitBook
On this page
  1. Java
  2. MySQL

排程 - Event

MySQL事件(Events)是一種用於安排和自動執行指定任務或SQL語句的機制。它類似於作業系統上的計劃任務(cron jobs)或任何其他自動化工具,但在MySQL中實現。

Create Event

DELIMITER //
CREATE EVENT event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
DO
BEGIN
    -- 執行的SQL語句或程式碼
END;
//
DELIMITER ;
  • event_name:事件的名稱,應該是唯一的。

  • schedule:事件的排程設定,包括頻率和開始時間。

  • ON COMPLETION [NOT] PRESERVE:選擇是否在事件執行完成後保留事件。PRESERVE表示保留,否則事件將被刪除。

  • ENABLE | DISABLE:您可以選擇啟用或禁用事件。默認情況下,事件是啟用的。

  • DO:事件的執行內容,包括要執行的SQL語句或程式碼。

排程設定

schedule 部分是事件的排程設定,可以使用以下選項:

  • EVERY interval:指定事件的執行頻率,interval 可以是 INTERVAL 運算式,例如 EVERY 1 DAY 表示每天執行一次。

  • STARTS start_time:指定事件的開始時間,可以是日期和時間的格式。事件將在這個時間之後開始執行。

  • ENDS end_time:可選,指定事件的結束時間。事件將在這個時間之前停止執行。

範例

每天早上7點開始都會執行一次,並且在執行完成後保留:

DELIMITER //
CREATE EVENT my_daily_event
ON SCHEDULE EVERY 1 DAY
STARTS TIMESTAMP(CURRENT_DATE, '07:00:00') -- 每天早上7點開始執行
ON COMPLETION PRESERVE
DO
BEGIN
    -- 執行您的SQL語句或程式碼
END;
//
DELIMITER ;

管理事件

要查看現有事件,可以使用以下SQL語句:

SHOW EVENTS;

要啟用或禁用事件,可以使用以下語句:

ALTER EVENT event_name ENABLE;
ALTER EVENT event_name DISABLE;

要刪除事件,可以使用以下語句:

DROP EVENT event_name;

請注意,執行事件需要相應的權限。通常,只有具有事件權限的用戶才能創建、修改或刪除事件。

總之,MySQL Event 是一種強大的自動化工具,可用於處理定期執行的任務和簡化數據庫管理。請確保謹慎設計和設置事件,以確保其正確性和安全性。

根據前面章節,針對分區增加排程機制,讓其真正做到全自動分區作業

DELIMITER ||
    -- 如果事件已經存在,就刪除名為`auto_part_event`的事件。這是為了確保不重複創建同一事件。
    DROP EVENT IF EXISTS `auto_part_event`;
    -- 創建一個事件,如果名稱為`auto_part_event`的事件不存在的話。
    CREATE EVENT IF NOT EXISTS `auto_part_event`
    
        -- 定義事件的執行計劃。在這裡,它被設置為每天執行一次。
        ON SCHEDULE EVERY 1 MONTH
            -- 定義事件的起始時間,表示從這個日期和時間開始執行事件。這個事件只有一個起始時間。
            -- 每月1號凌晨3點開始執行
            STARTS TIMESTAMP(DATE_FORMAT(NOW(), '%Y-%m-01 03:00:00'))
    
        -- 設置事件在到期後是否應保留。使用PRESERVE表示事件在到期後不應自動刪除。
        ON COMPLETION PRESERVE
    
        -- 啟用事件,使其能夠執行。
        ENABLE

        -- 添加對事件的註解,用於描述事件的目的或功能。
        COMMENT 'event_auto_partition'

        -- 開始事件的執行內容區塊。
        DO BEGIN

        -- 在內容區塊中,調用存儲過程auto_part並傳遞特定參數,以管理表t_big_data_practise的分區。
        call auto_part('local_test', 't_big_data_practise', (SELECT DATE(MIN(`create_date`)) FROM t_big_data_practise), 1, 3);
    
    -- 結束內容區塊,並恢復分隔符。
    END||
DELIMITER ;

具體說明如下:

  • ON SCHEDULE EVERY 1 MONTH:這部分設定了事件的執行頻率,每個月執行一次。

  • STARTS TIMESTAMP(DATE_FORMAT(NOW(), '%Y-%m-01 03:00:00')):這部分設定了事件的開始時間。我們使用NOW()函數獲取當前日期和時間,然後使用DATE_FORMAT函數將其調整為每月的1號凌晨3點。這確保了事件在每月1號凌晨3點開始執行。

  • DO BEGIN 和 END||:這是事件的執行內容區塊。在這個區塊中,我們調用了存儲過程auto_part,並傳遞了特定的參數,以管理表t_big_data_practise的分區。

該事件的目的是自動化管理表t_big_data_practise的分區。該事件每個月執行一次,不會自動刪除,確保了數據表的分區策略保持有效。

PreviousSQL 效能調校 - PartitionNextApache ShardingSphere

Last updated 1 year ago