将 mySQL 查询作为 cron 作业运行?

Posted

技术标签:

【中文标题】将 mySQL 查询作为 cron 作业运行?【英文标题】:Run a mySQL query as a cron job? 【发布时间】:2014-02-07 09:58:54 【问题描述】:

我想从所有超过 1 周的数据中清除我的 SQL 数据库,并且我想每晚进行一次。所以,我要建立一个 cron 作业。如何查询mysql而不用每次都手动输入密码?

php中的查询如下:

mysql_query("DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7");

有没有办法将它作为 shell 脚本运行?如果没有,有没有办法让cron运行一个php文件?

【问题讨论】:

【参考方案1】:

尝试创建如下所示的 shell 脚本:

#!/bin/bash

mysql --user=[username] --password=[password] --database=[db name] --execute="DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7"

然后您可以将其添加到 cron 中

【讨论】:

这个答案和我的一样好。这仅取决于您是否要通过php来完成。 这还取决于您是否希望将数据库凭据传播到不必要的更多地方。 event_scheduler 选项在这方面是一个改进,因为它既包含在数据库中,而且它的安装可以完全作为迁移脚本进行版本控制。 所以您将 mysql 密码暴露给其他 Windows 用户? 这是一个糟糕的答案。您应该使用以下答案来使用 MySQL 事件调度程序。 我喜欢fancyPants的回答。【参考方案2】:

这取决于系统上运行 cron 的内容,但是从 cron 运行 php 脚本所需要做的就是调用 php 安装的位置,然后调用脚本位置。每小时运行一次 crontab 的示例:

# crontab -e
00 * * * * /usr/local/bin/php /home/path/script.php

在我的系统上,我什至不用输入php安装的路径:

00 * * * * php /home/path/script.php

另一方面,您不应该使用 mysql 扩展,因为它已被弃用,除非您使用的是较旧的 php 安装。 Read here 进行比较。

【讨论】:

【参考方案3】:

我个人觉得使用 MySQL 事件调度器比使用 cron 更容易。

启用它

SET GLOBAL event_scheduler = ON;

并像这样创建一个事件:

CREATE EVENT name_of_event
ON SCHEDULE EVERY 1 DAY
STARTS '2014-01-18 00:00:00'
DO
DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7;

就是这样。

阅读更多关于语法here 和here 的更多信息。

【讨论】:

这应该是答案! 那是我需要的。最好的! ?✨【参考方案4】:

这是一个非常方便的页面,因为我需要从过期日期为

我在共享主机上,CRON 不喜欢 AndrewKDay 的建议。它还说(我同意)以这种方式暴露密码可能是不安全的。

然后我尝试在 phpMyAdmin 中打开事件,但再次在共享主机上,这是不行的。对不起花式裤子。

所以我转而将 SQL 脚本嵌入到 PHP 文件中。我用的例子 [这里][1]

[1]:https://www.w3schools.com/php/php_mysql_create_table.asp 将其存储在安全的子文件夹中,并添加了一个空的 index.php 以作为良好的衡量标准。然后我能够测试这个 PHP 文件(和我的 SQL 脚本)是否在浏览器 URL 行中工作。

到目前为止一切顺利。到 CRON。按照上面的例子几乎可以工作。我最终在 *.php 文件的路径之前调用了 PHP。否则 CRON 不知道如何处理该文件。

我的 cron 设置为每天运行一次,看起来像这样,为了安全而进行了修改。

00 * * * * php mywebsiteurl.com/wp-content/themes/ForteChildTheme/php/DeleteExpiredAssessment.php

对于 CRON 的最终测试,我最初将其设置为每分钟运行一次,并打开电子邮件警报。这很快确认它按计划运行,我将其改回每天一次。

希望这会有所帮助。

【讨论】:

以上是关于将 mySQL 查询作为 cron 作业运行?的主要内容,如果未能解决你的问题,请参考以下文章

从 cron 作业运行 pandas.io.gbq

paramiko 仅作为 cron 作业无效 RSA 私钥 [重复]

如何使用CRON作业在Joomla DB上运行此查询?

用于日常数据库备份的bash shell文件-作为CRON作业运行

将 Cron 作业存储在哪里,它们会一直运行吗?

确保 cron 作业不会两次执行相同的作业