Задание удалить строки старше 3 месяцев в базе данных mysql

Мы используем mysql-сервер в качестве централизованной системы ведения журнала, и я хочу, чтобы у меня было задание на удаление \clean записей в таблице, которые более 3 месяцев регулярно. Каков наилучший способ сделать это?

Спасибо заранее.

-hinling

Ответы

Ответ 1

Сохраняется ли дата создания элемента в поле?

Если да,

DELETE FROM myTable WHERE dateEntered < DATE_SUB(NOW(), INTERVAL 3 MONTH);

должен работать...

Вы можете запустить его в запланированном задании задачи/cron...

Ответ 2

MySQL 5.1 поддерживает Events. Я на самом деле не использовал их сам, поэтому я не буду ручаться за них. Однако, если все, что вы хотите сделать, это регулярно запускать инструкцию DELETE, я думаю, что она будет работать достаточно хорошо.

Ответ 3

Простым способом было бы запланировать задание, которое выполняется каждую ночь, которая вызывает хранимую процедуру для удаления всех строк старше трех месяцев. В зависимости от вашего O/S это должно быть легко сделать. Делайте это каждую ночь, и количество удаленных данных будет не таким, как это делается раз в месяц или около того.

В прошлом я также имел код в своем SP, который вставлял данные для удаления ненужных данных в это время, поэтому в основном каждый раз, когда вставлена ​​строка, сразу после того, как вставка запускает процесс очистки, который сделал немного обслуживания. Это был бы не мой первый выбор, но его можно было бы сделать, если количество вставок низкое, а удаление может быть выполнено быстро (вы не хотите замедлять пользователя). Хорошим побочным эффектом этого является то, что данные всегда чисты (т.е. Все данные всегда <= 3 месяца), но не уверены, что это важно в вашем приложении.

Вы также должны рассмотреть возможность архивирования строк в другую таблицу вместо удаления их, если есть вероятность, что вы захотите данных когда-нибудь для другой цели. Я всегда это делаю, и вы будете удивлены, какой герой может выглядеть, когда какой-то менеджер, который даже не знает, что вы сохраняете данные, внезапно нуждается в срочной необходимости... и вы можете доставить им.

Ответ 4

Перефразируя ваш вопрос: "У меня есть код, который не зависит от клиента, который я хочу запускать в базе данных несколько раз, и мне не нужно видеть вывод", тогда ответ "напишите сохраненный proc и вызывать его от любого клиента на регулярной основе".