Удаление старых записей из БД с помощью crontab - PullRequest
0 голосов
/ 21 марта 2011

В моей базе данных MySql есть таблица с именем "user_action".Я хочу ежедневно удалять старые записи из этой таблицы, которые старше 30 дней (согласно столбцу datetime "action_date"), и я хочу сделать это с помощью crontab.

Любые мысли?

Ответы [ 4 ]

5 голосов
/ 21 марта 2011

Создать /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.

2 голосов
/ 21 марта 2011

Для аутентификации создайте файл .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

Замените DATABASE именем вашей базы данных.

Это означает, что очистка будет выполняться в 3:00 ночи каждую ночь (каждый день месяца, каждый день недели и т. Д.). Ошибки будут отправлены на вашу электронную почту. >/dev/null необходимо, чтобы скрыть вывод без ошибок MySQL, который вам обычно не интересен.

И выполните эту команду, чтобы обновить системную копию crontab:

crontab ./crontab
0 голосов
/ 21 марта 2011

Напишите SQL (предпочтительная хранимая процедура) для этого и выполните этот SQL через crontab.

0 голосов
/ 21 марта 2011

Создайте скрипт на вашем любимом языке, который выполняет следующий запрос:

Псевдокод:

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

Затем добавьте его в cron для ежедневного выполнения.

...