开发者

Deleting old records from DB using crontab

开发者 https://www.devze.com 2023-02-18 06:28 出处:网络
I have a table in my MySql DB called \"user_action\". I want开发者_如何转开发 to delete old records from this table that are older then 30 days (according to the \"action_date\" datetime column) on a

I have a table in my MySql DB called "user_action". I want开发者_如何转开发 to delete old records from this table that are older then 30 days (according to the "action_date" datetime column) on a daily basis and I want to do it using crontab.

Any Thoughts?


Create /usr/local/bin/clear-out-old-records.sh and make it executable:

#!/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

...and then put /usr/local/bin/clear-out-old-records.sh into crontab.


For authentication, create a .my.cnf file in the user's home directory:

[client]
user=username
password=password

Then create a file called crontab. I strongly recommend that you don't edit contab directly, but always through this one file; otherwise it's too easy to accidentally overwrite the contents of 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

Replace DATABASE with the name of your database.

This means that the cleanup will run at 3:00 AM every night (every day of month, every day of week, etc). Errors will be sent to your email. >/dev/null is necessary to hide MySQL's non-error output, which you're usually not interested in.

And run this command to update the system's copy of crontab:

crontab ./crontab


Do a script in your favorite language that executes the following query:

Pseudocode:

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

Then add this to cron to execute daily.


Write a SQL (preferable stored procedure) to do that and execute that SQL via crontab.

0

精彩评论

暂无评论...
验证码 换一张
取 消