Як зробити ротаційний лог засобами MySQL

Якщо ви хочете використовувати лише БД, то можна зробити тригер. Видалятиме всі записи з таблиці старше 2х місяців.

Цей тригер буде виконуватися при кожному INSERT в таблицю і видаляти всі таблиці старше 2-х місяців. Хоча я зробив би все ж таки скрипт запускається по крону, т.к. Чищення через тригер може вплинути на продуктивність. :(

зазвичай у cron вішається скрипт, який займається такими речами. Якщо немає можливості повісити завдання в cron, то можна зробити тригер як вище писали, але додатково зробити просту фільтрацію за допомогою глобальної змінної в якій зберігати час останнього прибирання сміття.

заведіть користувача в mysql у якого мінімум прав на цю таблицю і зробіть функцію, яка виконує що потрібно. зі скрипту викликай її mysql -u user -ppass -e 'select the_function();'

2. з датою просто: delete from log_table where created

1. з розміром трохи складніше - в information_schema.tables є data_length в байтах - можна взяти різницю між 2 * 1024 * 1024 і data_length і поділити на data_length / table_rows - отримаємо скільки рядків, наприклад, потрібно видалити. щось типу select if(data_length>2*1024*1024,floor((data_length-2*1024*1024)/(data_length/table_rows)),0) from information_schema.tables where table_schema='db = 'log_table' into @row_cnt; delete from log_table order by created limit @row_cnt;

при цьому, звичайно ж, треба завести індекс на created — поле де дата створення