Violet Epifit

violet.su

Автоматизация задач в MariaDB: Планировщик событий (Event Scheduler)

Автоматизация задач в MariaDB: Планировщик событий (Event Scheduler)

Если вам нужно регулярно выполнять рутинные задачи в базе данных — чистить старые логи, архивировать записи, обновлять статистику — не обязательно писать PHP-скрипты и настраивать cron. В MariaDB есть встроенный планировщик событий (Event Scheduler), который работает прямо внутри СУБД.

Что такое Event Scheduler?

Это аналог cron, но встроенный непосредственно в MariaDB. Он позволяет создавать задачи (события), которые выполняются:

  • Однократно — в указанное время.
  • Периодически — каждые N минут/часов/дней/месяцев.
  • По расписанию — в конкретное время каждый день.

Преимущества перед cron + PHP

  1. Не зависит от веб-сервера — событие выполнится, даже если PHP не работает.
  2. Меньше нагрузки — не нужно запускать интерпретатор PHP.
  3. Проще код — чистый SQL без обвязки.
  4. Надёжнее — задача хранится в самой базе данных.
  5. Легко управлять — можно включить/выключить одним SQL-запросом.

Включение планировщика

По умолчанию планировщик может быть выключен. Проверяем статус:

SELECT @@event_scheduler;

Если результат OFF, включаем:

SET GLOBAL event_scheduler = ON;

Чтобы планировщик включался автоматически после перезагрузки сервера, добавьте в конфигурационный файл MariaDB (my.cnf или my.ini) в секцию [mysqld]:

event_scheduler = ON

Создание события: практический пример

Задача: Ежедневно в 3:00 утра удалять из таблицы звонков записи старше одного месяца.

CREATE EVENT ev_clean_old_calls
ON SCHEDULE
  EVERY 1 DAY
  STARTS (CURRENT_DATE + INTERVAL 1 DAY) + INTERVAL 3 HOUR
ON COMPLETION PRESERVE
COMMENT 'Ежедневная очистка звонков старше 1 месяца в 03:00'
DO
  DELETE FROM `uis-bitrix` 
  WHERE `CALL_DATE_TIME` < DATE_SUB(NOW(), INTERVAL 1 MONTH);

Разбор параметров:

  • EVERY 1 DAY — выполнять каждые сутки.
  • STARTS — дата и время первого запуска. (CURRENT_DATE + INTERVAL 1 DAY) — завтра, + INTERVAL 3 HOUR — в 3 часа ночи.
  • ON COMPLETION PRESERVE — сохранить событие после выполнения (не удалять).
  • COMMENT — описание для удобства.
  • DO — SQL-код, который выполняется.

Полезные примеры

1. Однократное выполнение (очистка кэша в полночь)

CREATE EVENT ev_clear_cache_once
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO
  TRUNCATE TABLE `cache_table`;

2. Каждые 6 часов (обновление статистики)

CREATE EVENT ev_update_stats
ON SCHEDULE EVERY 6 HOUR
STARTS CURRENT_TIMESTAMP
DO
  CALL update_statistics();

3. Каждое воскресенье в 2:00 (архивация)

CREATE EVENT ev_weekly_archive
ON SCHEDULE EVERY 1 WEEK
STARTS '2026-07-27 02:00:00'
DO
  INSERT INTO `archive_table` SELECT * FROM `main_table` WHERE updated < DATE_SUB(NOW(), INTERVAL 30 DAY);

Управление событиями

Просмотр всех событий

SHOW EVENTS;

Включить/выключить событие

-- Отключить
ALTER EVENT ev_clean_old_calls DISABLE;

-- Включить
ALTER EVENT ev_clean_old_calls ENABLE;

Изменить расписание

ALTER EVENT ev_clean_old_calls
ON SCHEDULE EVERY 2 DAY
STARTS '2026-07-25 04:00:00';

Удалить событие

DROP EVENT ev_clean_old_calls;

Важные нюансы

1. Часовой пояс

Планировщик использует системный часовой пояс сервера. Убедитесь, что время на сервере настроено правильно:

SELECT NOW();

2. Права доступа

Для создания событий нужна привилегия EVENT. Для управления чужими событиями — SUPER.

3. Ошибки в коде

Если в SQL-коде события есть ошибка, событие всё равно выполнится, но завершится с ошибкой. Ошибки пишутся в лог MariaDB.

4. Блокировки таблиц

Если событие выполняется долго, оно может блокировать таблицы. Для больших объёмов данных используйте удаление порциями:

-- Вместо одного DELETE на 100000 записей
DELETE FROM `big_table` WHERE date < DATE_SUB(NOW(), INTERVAL 30 DAY);

-- Лучше удалять по 1000 записей
DELETE FROM `big_table` WHERE date < DATE_SUB(NOW(), INTERVAL 30 DAY) LIMIT 1000;

5. Проверка работы

После создания события проверьте:

SHOW EVENTS WHERE Db = 'your_database';

Обратите внимание на колонки:

  • Status — должно быть ENABLED.
  • Starts — дата первого запуска.
  • Execute at — для однократных событий.

Заключение

Event Scheduler — мощный инструмент для автоматизации рутинных задач в MariaDB. Он проще cron, надёжнее PHP-скриптов и не требует дополнительных настроек сервера.

Используйте его для очистки старых данных, архивации записей, пересчёта статистики, обновления кэша и регулярных отчётов. И ваша база данных будет работать быстрее, а вы — меньше заниматься рутиной.


P.S. На моём проекте этот планировщик за одну ночь удалил 391 000 устаревших записей звонков, сократив таблицу с 515 000 до 124 000 строк. Теперь это происходит автоматически каждое утро в 3:00.


Верный CRONTAB в Bitrix-24

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=”” <– Рекомендую поставить пустым, чтобы не спамить почту, если не нужно

# добавить ОДНУ рабочую строку для php_interface
* * * * * bitrix /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php

# Остальные задачи
40 4 * * 6 root /opt/webdir/bin/bx-dehydrated


Syncthing на CentOS 9 — полная инструкция

 

 

🚀 Syncthing на CentOS 9 — полная инструкция

1. Установка

dnf install -y epel-release dnf install -y syncthing

2. Создать systemd-службу (от root)

cat > /etc/systemd/system/syncthing-bitrix.service << ‘EOF’ [Unit] Description=Syncthing for bitrix After=network.target [Service] User=bitrix Group=bitrix Type=notify ExecStart=/usr/bin/syncthing serve –no-browser –no-restart –logflags=0 SuccessExitStatus=3 4 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload

3. Настроить конфиг (открыть доступ извне)

# Запустить один раз для генерации конфига (если папка пуста) runuser -u bitrix — syncthing generate # Изменить адрес прослушивания sed -i ‘s/127.0.0.1:8384/0.0.0.0:8384/’ /home/bitrix/.local/state/syncthing/config.xml # Проверить результат grep address /home/bitrix/.local/state/syncthing/config.xml # Должно быть: <address>0.0.0.0:8384</address>

4. Настроить firewall

firewall-cmd –permanent –add-port=8384/tcp firewall-cmd –permanent –add-port=22000/tcp firewall-cmd –permanent –add-port=22000/udp firewall-cmd –reload

5. Запустить и включить автозагрузку

# Убить возможные ручные процессы pkill -9 -u bitrix syncthing sleep 2 # Запустить службу systemctl enable –now syncthing-bitrix.service # Проверить статус systemctl status syncthing-bitrix.service

6. Проверка работы

# Порт слушается ss -tlnp | grep 8384 # Должно быть: *:8384 или 0.0.0.0:8384 # Тест доступа curl -I http://127.0.0.1:8384 # Логи службы journalctl -u syncthing-bitrix -f

7. Доступ к веб-интерфейсу

Адрес: http://ВАШ_IP:8384 Логин/пароль: задаётся при первом входе (обязательно!) Device ID: отображается в интерфейсе

⚠️ Сразу задайте пароль в Настройки → Доступ к графическому интерфейсу

8. Управление службой

systemctl start syncthing-bitrix # запустить systemctl stop syncthing-bitrix # остановить systemctl restart syncthing-bitrix # перезапустить systemctl status syncthing-bitrix # статус journalctl -u syncthing-bitrix -f # логи

9. Расположение файлов

Тип Путь
Конфиг /home/bitrix/.local/state/syncthing/config.xml
База данных /home/bitrix/.local/state/syncthing/db/
Логи systemd journalctl -u syncthing-bitrix

10. Частые проблемы

Проблема Решение
Failed to acquire lock pkill -9 -u bitrix syncthing; sleep 2; systemctl start syncthing-bitrix
Не открывается веб-интерфейс Проверить curl, firewall, что в конфиге 0.0.0.0:8384
Служба падает при старте chown -R bitrix:bitrix /home/bitrix/.local/state/syncthing
Нет автозапуска systemctl is-enabled syncthing-bitrix → должен быть enabled

11. Обновление

dnf update syncthing systemctl restart syncthing-bitrix


Как правильно – имплантат или имплант?

Правильно: импланта́т и импла́нт.

Оба варианта являются нормативными и зафиксированы в орфографических словарях русского языка

gramota.ru

Кратко:

Форма
Статус
Примечание
имплантат
✅ правильно

Полная форма, от лат. implantare («всаживать»), чаще используется в научной и медицинской литературе

mel.fm
имплант
✅ правильно

Краткая форма, заимствована из английского implant, допустима в разговорной и профессиональной речи

www.ekburg.ru
имплантант
❌ ошибка

Такого слова в русском языке нет; суффикс -ант обычно обозначает лицо (лаборант, музыкант), поэтому форма логически несостоятельна

gramota.ru

Рекомендации по употреблению:

  • В официальных документах, научных статьях, медицинской документации предпочтительнее имплантат.
  • В устной речи, рекламе, общении с пациентами допустимо имплант — это нейтральный, более краткий вариант
    www.belstom.by

    .

  • Избегайте формы имплантант — это распространённая орфографическая ошибка
    www.ekburg.ru

    .