Автоматическая очистка списка банов по расписанию » Counter-strike Source портал sourceplay.ru
Counter-strike Source портал
 

Автоматическая очистка списка банов по расписанию

Очень многие администраторы пользуются популярной системой банов 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);


Теги: sourcebans mysql
  • Просмотров: 9 217

Добавление комментария

Переместиться наверх
Sourceplay.ru © Matysh 2008-2023
Разработка сайта: web.justbusiness.studio
  • Яндекс.Метрика