Linux 使用crontab从数据库中删除旧记录
我的MySql数据库中有一个名为user_action的表。我想每天根据action_date datetime列从这个表中删除超过30天的旧记录,我想使用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。
有什么想法吗?用您最喜欢的语言编写一个脚本,执行以下查询: 伪代码:
"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