MySQL 創建定時任務 詳解

来源:https://www.cnblogs.com/lhboke/archive/2020/03/03/12402373.html
-Advertisement-
Play Games

自 MySQL5.1.6起,增加了一個非常有特色的功能–事件調度器(Event Scheduler),可以用做定時執行某些特定任務,來取代原先只能由操作系統的計劃任務來執行的工作。事件調度器有時也可稱為臨時觸發器(temporal triggers),因為事件調度器是基於特定時間周期觸發來執行某些任 ...


自 MySQL5.1.6起,增加了一個非常有特色的功能–事件調度器(Event Scheduler),可以用做定時執行某些特定任務,來取代原先只能由操作系統的計劃任務來執行的工作。事件調度器有時也可稱為臨時觸發器(temporal triggers),因為事件調度器是基於特定時間周期觸發來執行某些任務,而觸發器(Triggers)是基於某個表所產生的事件觸發的,區別也就在這裡

在使用這個功能之前必須確保 event_scheduler 已開啟,可執行 :
mysq> SET GLOBAL event_scheduler = 1;
# 或
mysql> SET GLOBAL event_scheduler = ON;
也可以在配置文件中添加設置 : event_scheduler=1
也可以直接在啟動命令加上 : --event_scheduler=1

查看當前是否已開啟事件調度器 :
mysql> SHOW VARIABLES LIKE 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+
1 row in set (0.01 sec)
# 或
mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON                |
+-------------------+
1 row in set (0.00 sec)
# 或
mysql> SHOW PROCESSLIST;
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id | User            | Host      | db   | Command | Time | State                  | Info             |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
|  6 | root            | localhost | NULL | Query   |    0 | starting               | SHOW PROCESSLIST |
|  7 | event_scheduler | localhost | NULL | Daemon  |   81 | Waiting on empty queue | NULL             |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)

創建事件(CREATE EVENT)
CREATE EVENT [IFNOT EXISTS] event_name
  ON SCHEDULE schedule
  [ON COMPLETION [NOT] PRESERVE]
  [ENABLE | DISABLE]
  [COMMENT 'comment']
  DO sql_statement;
[ON COMPLETION [NOT] PRESERVE] 可以設置這個事件是執行一次還是持久執行,預設為 NOT PRESERVE
[ENABLE | DISABLE] 可是設置該事件創建後狀態是否開啟或關閉,預設為ENABLE
[COMMENT 'comment'] 可以給該事件加上註釋

# 創建表
mysql> USE Test;
mysql> CREATE TABLE aaa(timeline TIMESTAMP);

# 每秒插入一條記錄到數據表
mysql> CREATE EVENT e_test_insert ON SCHEDULE EVERY 1 SECOND
   -> DO INSERT INTO test.aaa VALUES(CURRENT_TIMESTAMP);
mysql> SELECT * FROM aaa;

# 5天後清空 test表
mysql> CREATE EVENT e_test
    -> ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
    -> DO TRUNCATE TABLE test.aaa;

# 2018年8月8日8點整清空 test表
mysql> CREATE EVENT e_test
    -> ON SCHEDULE AT TIMESTAMP '2018-08-08 8:00:00'
    -> DO TRUNCATE TABLE test.aaa;

# 每天定時清空 test表
mysql> CREATE EVENT e_test
    -> ON SCHEDULE EVERY 1 DAY
    -> DO TRUNCATE TABLE test.aaa;

# 5天後開啟每天定時清空test表
mysql> CREATE EVENT e_test
    -> ON SCHEDULE EVERY 1 DAY
    -> STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    -> DO TRUNCATE TABLE test.aaa;

# 每天定時清空 test表,5天後停止執行
mysql> CREATE EVENT e_test
    -> ON SCHEDULE EVERY 1 DAY
    -> ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    -> DO TRUNCATE TABLE test.aaa;

# 5天後開啟每天定時清空test表,一個月後停止執行
mysql> CREATE EVENT e_test
    -> ON SCHEDULE EVERY 1 DAY
    -> STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    -> ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
    -> DO TRUNCATE TABLE test.aaa;

# 每天定時清空test表(只執行一次,任務完成後就終止該事件)
mysql> CREATE EVENT e_test
    -> ON SCHEDULE EVERY 1 DAY
    -> ON COMPLETION NOT PRESERVE
    -> DO TRUNCA TETABLE test.aaa;

修改事件(ALTER EVENT)
ALTER EVENT event_name
  [ON SCHEDULE schedule]
  [RENAME TO new_event_name]
  [ON COMPLETION [NOT] PRESERVE]
  [COMMENT 'comment']
  [ENABLE | DISABLE]
  [DO sql_statement]

# 臨時關閉事件
mysql> ALTER EVENT e_test DISABLE;
# 開啟事件
mysql> ALTER EVENT e_test ENABLE;

# 將每天清空test表改為5天清空一次
mysql> ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY;
註 : 如果將 event 執行 ALTER EVENT event_name DISABLE. 那麼當重新啟動 mysql伺服器後,該 event 將被刪除

刪除事件(DROP EVENT)
DROP EVENT [IF EXISTS] event_name

# 刪除創建的 e_test事件
mysql> DROP EVENT e_test;    # 如果該事件不存在將會產生 ERROR 1513 (HY000): Unknown event 錯誤,因此最好加上IF EXISTS
mysql> DROP EVENT IF EXISTS e_test;

每秒鐘調用一次存儲過程,用於判斷 SLAVE 是否正常運行,如果發現 SLAVE 關閉了,忽略 0 次錯誤,然後重新啟動 SLAVE
mysql> DELIMITER //
    -> CREATE PROCEDURE Slave_Monitor()
    -> BEGIN
    -> SELECT VARIABLE_VALUE INTO @SLAVE_STATUS FROM information_schema.GLOBAL_STATUS WHEREVARIABLE_NAME='SLAVE_RUNNING';
    -> IF ('ON'!= @SLAVE_STATUS) THEN
    -> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=0;
    -> SLAVE START;
    -> ENDIF;
    -> END; //
    -> DELIMITER;

# 由於存儲過程中無法調用類似 SHOW SLAVE STATUS 這樣的語句,因此無法得到確切的複製錯誤信息和錯誤代碼,不能進一步的處理 SLAVE 停止的各種情況
mysql> CREATE EVENT IF NOT EXISTS Slave_Monitor
    -> ON SCHEDULE EVERY 5 SECOND
    -> ON COMPLETION PRESERVE
    -> DO CALL Slave_Monitor();

————————————————
版權聲明:本文為CSDN博主「小柴的生活觀」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chenshun123/article/details/79677193


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.代碼 2.定義類 3.註釋 4.定義變數 5.聲明方法 6.常用數據類型 7.運算符 1. 算數運算符 | 操作符 | 名稱 | 描述 | | | | | | + | 加法 | 相加運算符兩側的值 | | – | 減法 | 左操作數減去右操作數 | | | 乘法 | 相乘操作符兩側的值 | | ...
  • 7 Python是如何進行記憶體管理的? http://developer.51cto.com/art/201007/213585.htm Python引用了一個記憶體池(memory pool)機制,即Pymalloc機制(malloc:n.分配記憶體),用於管理對小塊記憶體的申請和釋放 記憶體池(memo ...
  • 通過本文你將學習如何使用Spring Boot和WebSocket API開發一個簡單的群聊天應用。 WebSocket是HTML5開始提供的一種在單個TCP連接上進行全雙工通訊的協議。WebSocket使得客戶端和伺服器之間的數據交換變得更加簡單,允許伺服器主動向客戶端推送數據。在WebSocke ...
  • 項目背景 2019年新型冠狀病毒感染的肺炎疫情發生以來,牽動人心,舉國哀痛,口罩、酒精、消毒液奇貨可居。 搶不到口罩,怎麼辦?作為技術人今天分享如何使用Python實現自動戴口罩系統,來安慰自己,系統效果如下所示: 本系統的實現原理是藉助 Dlib模塊的Landmark人臉68個關鍵點檢測庫輕鬆識別 ...
  • 場景 業務場景:下單時扣減庫存,由於比較簡單,商品和庫存都放到了一個上下文中 學習多個上下文之間的交互,協作,訂單上下文生成訂單時,扣減商品上下文中的庫存 第一個方法 第一個方法的技術選型,Redis,WebApiClient,EF CORE, Polly, ExceptionLess,雪花演算法 把 ...
  • RabbitMQ的簡介,關鍵詞,以及是如果運行的,其運作模式有哪一些,在使用的時候需要註意一些什麼。帶著這一些問題,一起進入到文章中去。 ...
  • Windows操作系統日誌分析 一、Windows操作系統日誌介紹: 1.Windows操作系統日誌介紹: <1>.Windows操作系統在運行生命周期,以特定數據結構方式存儲、記錄OS大量運行的日誌信息,例如:System、Security、Application... ...,主要包括:Wind ...
  • 完成SRAM晶元的測試,需要設計測試電路板。測試電路板主要提供測試介面和電源。晶元的控制信號和數據信號由紅色颶風II-Xilinx FPGA 開發板提供,使用ISE13.2 軟體建立測試工程,編寫Verilog 測試程式(主要包括按照時序提供分頻後的測試時鐘、數據信號和控制信號),通過JTAG 下載 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...