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
这个事件的名称为 "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的计划任务。