MySQL是目前使用非常廣泛的一款數據庫管理系統,其功能強大,性能穩定,適用于大型企業應用系統。除了作為數據存儲的工具,MySQL還可以通過編寫計劃任務來定時執行一些操作,例如備份數據、定期清理垃圾數據等。
MySQL支持兩種方法來定時執行計劃任務:
1. 腳本計劃任務 2. 事件調度器
下面分別詳細介紹這兩種方法的步驟。
1. 腳本計劃任務
#!/bin/bash # backup.sh # export data DB_HOST="localhost" DB_USER="root" DB_PASS="password" DB_NAME="db_name" DATE=$(date +%d-%m-%Y_%H:%M:%S) DEST="/var/backups/mysql" mkdir -p "$DEST" # dump database echo "Back up the database ${DB_NAME}..." mysqldump --host="$DB_HOST" --user="$DB_USER" --password="$DB_PASS" --single-transaction --routines "$DB_NAME" | gzip >"$DEST/${DB_NAME}_${DATE}.gz" echo "Done!"
保存腳本并添加執行權限:
chmod +x /path/to/backup.sh
添加計劃任務,打開終端并輸入:
crontab -e
在打開的文件中,添加下面一行:
0 0 * * * /path/to/backup.sh >/dev/null 2>&1
此行的意思是,在每天的0點0分備份數據庫,將日志輸出到/dev/null,即不輸出日志。
2. 事件調度器
MySQL的事件調度器是一種內置工具,可以用來在特定時間或特定時間間隔內執行指定的SQL語句或程序。
首先,需要開啟事件調度器:
SET GLOBAL event_scheduler = ON;
創建事件:
CREATE EVENT event_name ON SCHEDULE EVERY 1 DAY DO BEGIN DELETE FROM table_name WHERE date< DATE_SUB(NOW(), INTERVAL 30 DAY); END
這個事件的名稱為 "event_name",每隔一天執行一次,刪除"table_name"表中日期小于30天前的記錄。
刪除事件:
DROP EVENT event_name;
固定時間執行事件:
CREATE EVENT event_name ON SCHEDULE AT '2022-07-11 23:50:00' DO BEGIN INSERT INTO table_name (id, name, age) VALUES (1, 'John Doe', 30); END
這個事件的名稱為 "event_name",在指定的日期和時間點執行,插入一條記錄到“table_name”表中。
通過這兩種方法,我們可以輕松地實現MySQL的計劃任務。