searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用Crontab代替MySQL的Event

2024-06-17 04:09:07
33
0

文章背景:

由于我们一类节点目前还不支持开启event_scheduler功能,而客户业务上又有这方面需求,所以我们需要用其他工具来代替这个功能。

 

一、为什么不支持?

相关说明:

A、每个节点实例,存在event_scheduler定时任务大开关;
B、每个event事件都有启用状态,比如enabled、slaveside_disabled、disabled;  

所有的event事件,创建成功后的状态是:
A、主库是enabled(即主库启用)
B、从库是slaveside_disabled(即从库禁用)

切换后,event事件状态是:
A、主库slaveside_disabled(实际上是禁用)
B、从库enabled(从库只读,read_only=1, 以普通用户执行该事件会报错,以super权限用户强行运行 也是从库产生事务,数据不一致、且相关数据不会同步到主库)  

基于以上基础,
1、主库的slaveside_disabled状态的小事件需要用户自行改为enabled才能正常运行;
2、高可用组件无法做到“切换后 自动将主库的所有event事件修改为enabled”,因为可能存在客户自行定义的slaveside_disabled、disabled禁用状态的事件,全部修改为enabled是不合理的动作。

总结:如果开启event_scheduler,高可用实例无法保证 event_scheduler始终在主节点运行,因为会存在高可用切换。

 

二、使用Crontab代替Event来定期执行SQL语句

操作步骤如下:

1.创建一个包含要执行的 MySQL 命令的脚本,例如 mysql_task.sh,脚本内容类似这样:

#!/bin/bash
mysql -u [username] -p[password] [database] -e "your mysql command here"

确保将 [username][password] 和 [database] 替换为实际的数据库用户名、密码和数据库名,以及将 "your mysql command here" 替换为具体的 MySQL 命令。

2.给脚本添加执行权限:

chmod +x mysql_task.sh

3.使用 crontab -e 编辑定时任务,添加类似这样的一行来指定定期执行该脚本:

* * * * * /path/to/mysql_task.sh
(这里的时间设置根据你的需求来,/path/to/mysql_task.sh 替换为实际脚本的路径)。例如,如果你想每天凌晨 2 点执行这个脚本,可以这样写:
0 2 * * * /path/to/mysql_task.sh

4.Crontab命令说明:

Crontab 是用于在 Linux 系统中设置定时任务的命令,他的主要功能有创建、编辑、查看和删除定时任务列表。以下是对它的详细介绍:

常用操作:

  • crontab -e:打开编辑器以编辑当前用户的定时任务列表
  • crontab -l:列出当前用户的所有定时任务
  • crontab -r:删除当前用户的所有定时任务

定时任务格式:

  • 在分钟字段(第一个 *)表示每分钟,分钟(0-59)
  • 在小时字段(第二个 *)表示每小时,小时(0-23)
  • 在日字段(第三个 *)表示每一天,日(1-31)
  • 在月字段(第四个 *)表示每个月,月(1-12)
  • 在星期字段(第五个 *)表示每星期,周(0-6,0 表示星期日)
示例:
  • * * * * * command 就表示该命令每分钟都执行。再比如 0 * * * * command 表示每小时的第 0 分钟(即整点)执行命令
  • 30 2 * * * /path/to/script.sh:表示每天凌晨 2 点 30 分执行指定脚本
  • 0 8 1 * * /path/to/command:表示每月 1 日上午 8 点执行命令
注意事项:
  • 确保命令或脚本具有合适的执行权限。
  • 要注意时间设置的准确性和合理性,避免设置过于频繁或不合理的任务导致系统资源过度消耗
  • 可以使用特殊字符来表示更灵活的时间安排,如 *(任意值)、,(列举多个值)、-(范围)、/(间隔)等。
0条评论
0 / 1000
DBM
8文章数
0粉丝数
DBM
8 文章 | 0 粉丝
原创

使用Crontab代替MySQL的Event

2024-06-17 04:09:07
33
0

文章背景:

由于我们一类节点目前还不支持开启event_scheduler功能,而客户业务上又有这方面需求,所以我们需要用其他工具来代替这个功能。

 

一、为什么不支持?

相关说明:

A、每个节点实例,存在event_scheduler定时任务大开关;
B、每个event事件都有启用状态,比如enabled、slaveside_disabled、disabled;  

所有的event事件,创建成功后的状态是:
A、主库是enabled(即主库启用)
B、从库是slaveside_disabled(即从库禁用)

切换后,event事件状态是:
A、主库slaveside_disabled(实际上是禁用)
B、从库enabled(从库只读,read_only=1, 以普通用户执行该事件会报错,以super权限用户强行运行 也是从库产生事务,数据不一致、且相关数据不会同步到主库)  

基于以上基础,
1、主库的slaveside_disabled状态的小事件需要用户自行改为enabled才能正常运行;
2、高可用组件无法做到“切换后 自动将主库的所有event事件修改为enabled”,因为可能存在客户自行定义的slaveside_disabled、disabled禁用状态的事件,全部修改为enabled是不合理的动作。

总结:如果开启event_scheduler,高可用实例无法保证 event_scheduler始终在主节点运行,因为会存在高可用切换。

 

二、使用Crontab代替Event来定期执行SQL语句

操作步骤如下:

1.创建一个包含要执行的 MySQL 命令的脚本,例如 mysql_task.sh,脚本内容类似这样:

#!/bin/bash
mysql -u [username] -p[password] [database] -e "your mysql command here"

确保将 [username][password] 和 [database] 替换为实际的数据库用户名、密码和数据库名,以及将 "your mysql command here" 替换为具体的 MySQL 命令。

2.给脚本添加执行权限:

chmod +x mysql_task.sh

3.使用 crontab -e 编辑定时任务,添加类似这样的一行来指定定期执行该脚本:

* * * * * /path/to/mysql_task.sh
(这里的时间设置根据你的需求来,/path/to/mysql_task.sh 替换为实际脚本的路径)。例如,如果你想每天凌晨 2 点执行这个脚本,可以这样写:
0 2 * * * /path/to/mysql_task.sh

4.Crontab命令说明:

Crontab 是用于在 Linux 系统中设置定时任务的命令,他的主要功能有创建、编辑、查看和删除定时任务列表。以下是对它的详细介绍:

常用操作:

  • crontab -e:打开编辑器以编辑当前用户的定时任务列表
  • crontab -l:列出当前用户的所有定时任务
  • crontab -r:删除当前用户的所有定时任务

定时任务格式:

  • 在分钟字段(第一个 *)表示每分钟,分钟(0-59)
  • 在小时字段(第二个 *)表示每小时,小时(0-23)
  • 在日字段(第三个 *)表示每一天,日(1-31)
  • 在月字段(第四个 *)表示每个月,月(1-12)
  • 在星期字段(第五个 *)表示每星期,周(0-6,0 表示星期日)
示例:
  • * * * * * command 就表示该命令每分钟都执行。再比如 0 * * * * command 表示每小时的第 0 分钟(即整点)执行命令
  • 30 2 * * * /path/to/script.sh:表示每天凌晨 2 点 30 分执行指定脚本
  • 0 8 1 * * /path/to/command:表示每月 1 日上午 8 点执行命令
注意事项:
  • 确保命令或脚本具有合适的执行权限。
  • 要注意时间设置的准确性和合理性,避免设置过于频繁或不合理的任务导致系统资源过度消耗
  • 可以使用特殊字符来表示更灵活的时间安排,如 *(任意值)、,(列举多个值)、-(范围)、/(间隔)等。
文章来自个人专栏
RDS
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0