Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用crontab从数据库中删除旧记录_Linux_Crontab - Fatal编程技术网

Linux 使用crontab从数据库中删除旧记录

Linux 使用crontab从数据库中删除旧记录,linux,crontab,Linux,Crontab,我的MySql数据库中有一个名为user_action的表。我想每天根据action_date datetime列从这个表中删除超过30天的旧记录,我想使用crontab来完成 有什么想法吗?用您最喜欢的语言编写一个脚本,执行以下查询: 伪代码: "DELETE FROM user_action WHERE created_at < #{(Date.now - 30.days)}" 然后将其添加到cron以每天执行。编写一个SQL存储过程来执行该操作,并通过crontab执行该SQL。

我的MySql数据库中有一个名为user_action的表。我想每天根据action_date datetime列从这个表中删除超过30天的旧记录,我想使用crontab来完成


有什么想法吗?

用您最喜欢的语言编写一个脚本,执行以下查询:

伪代码:

"DELETE FROM user_action WHERE created_at < #{(Date.now - 30.days)}" 

然后将其添加到cron以每天执行。

编写一个SQL存储过程来执行该操作,并通过crontab执行该SQL。

要进行身份验证,请在用户的主目录中创建一个.my.cnf文件:

[client]
user=username
password=password
然后创建一个名为crontab的文件。我强烈建议您不要直接编辑contab,而是始终通过这个文件;否则很容易意外地覆盖crontab的内容

MAILTO="email@foo.com"

# 1. minute (0-59)
# |   2. hour (0-23)
# |   |   3. day of month (1-31)
# |   |   |   4. month (1-12)
# |   |   |   |   5. day of week (0-7: 0 or 7 is Sun, or use names)
# |   |   |   |   |   6. commandline
# |   |   |   |   |   |
#min hr  dom mon dow command
  0   3   *   *   *  mysql DATABASE -e "DELETE FROM user_action WHERE action_date < subdate(now(), interval 30 day)" >/dev/null
创建/usr/local/bin/clear-out-old-records.sh并使其可执行:

#!/bin/bash
SQL="DELETE FROM user_action WHERE action_date < DATE_SUB(CURDATE(),INTERVAL 30 DAY)"

MYSQL_USER="<your-user>"
MYSQL_PASS="<your-password>"
MYSQL_DB="<your-db>"

echo $SQL | /usr/bin/mysql --user=$MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB

…然后将/usr/local/bin/clear-out-old-records.sh放入crontab中。

思考1:在SQL中如何执行?如何从crontab执行存储过程?使用mysql命令像其他SQL一样执行过程。您需要在命令行cool上指定Server/DB/Username/password,谢谢。附加问题:标准mysql日志记录到哪里去了?例如,已删除记录的数量
#!/bin/bash
SQL="DELETE FROM user_action WHERE action_date < DATE_SUB(CURDATE(),INTERVAL 30 DAY)"

MYSQL_USER="<your-user>"
MYSQL_PASS="<your-password>"
MYSQL_DB="<your-db>"

echo $SQL | /usr/bin/mysql --user=$MYSQL_USER --password=$MYSQL_PASS $MYSQL_DB