Автоматическая очистка списка банов по расписанию
Очень многие администраторы пользуются популярной системой банов sourcebans. У нас она уже более 4-х лет, и, разумеется, в ней накопилось большое количество уже неактуальных данных (лог действий админов, устаревшие баны и логи блокировок, которые содержат десятки тысяч записей). Можно чистить их периодически вручную, но недостатки этого способа очевидны. В этой короткой статье расскажу о том, как автоматизировать процесс очистки sourcebans при помощи выполнения mysql запросов по расписанию.
Итак, первым шагом нам нужно включить MySQL Event Scheduler или встроенный диспетчер событий в MySQL.
Планировщик по умолчанию выключен, для того чтобы его включить надо добавить в my.ini или в my.cnf
[mysqld]
event_scheduler = on
И перезапустить mysql.
Для проверки, работает ли планировщик, выполните запрос:
mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (0.00 sec)
Образец добавления записи:
CREATE EVENT `myevent`
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
ON COMPLETION PRESERVE
DO
UPDATE `myschema`.`mytable` SET `mycol` = `mycol` + 1;
В этом примере мы создаем событие с именем myevent, которое будет выполняться каждые 10 минут начиная с текущего момента. Ну а в строке "DO" у нас, собственно, тот запрос, который нам нужно выполнять по расписанию.
Применим это к sourcebans. Например, мы хотим каждый час очищать лог заблокированных игроков, оставляя записи только за последние 30 дней. Для этого я составил запрос:
DELETE FROM `sb_banlog` WHERE `time` < (UNIX_TIMESTAMP()-2592000);
Добавляем задание на каждый час:
CREATE EVENT `clear_log`
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
ON COMPLETION PRESERVE
DO
DELETE FROM `sb_banlog` WHERE `time` < (UNIX_TIMESTAMP()-2592000);
Таким же образом можно удалять баны, выданные более года назад:
DELETE FROM `sb_bans` WHERE `created` < (UNIX_TIMESTAMP()-31536000);
- Просмотров: 8 412