Violet Epifit
violet.su
Автоматизация задач в MariaDB: Планировщик событий (Event Scheduler)
Автоматизация задач в MariaDB: Планировщик событий (Event Scheduler)
Если вам нужно регулярно выполнять рутинные задачи в базе данных — чистить старые логи, архивировать записи, обновлять статистику — не обязательно писать PHP-скрипты и настраивать cron. В MariaDB есть встроенный планировщик событий (Event Scheduler), который работает прямо внутри СУБД.
Что такое Event Scheduler?
Это аналог cron, но встроенный непосредственно в MariaDB. Он позволяет создавать задачи (события), которые выполняются:
- Однократно — в указанное время.
- Периодически — каждые N минут/часов/дней/месяцев.
- По расписанию — в конкретное время каждый день.
Преимущества перед cron + PHP
- Не зависит от веб-сервера — событие выполнится, даже если PHP не работает.
- Меньше нагрузки — не нужно запускать интерпретатор PHP.
- Проще код — чистый SQL без обвязки.
- Надёжнее — задача хранится в самой базе данных.
- Легко управлять — можно включить/выключить одним 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.
Копировать с локального сервера на удаленный
rsync -avP –partial -e “ssh -p 22222” /share/Backup/ root@oldbitrix.ru:/h
ome/bitrix/www/
Проверка БД mysqlcheck
sudo mysqlcheck -o sitemanager -u root -p
Верный 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. Установка
2. Создать systemd-службу (от root)
3. Настроить конфиг (открыть доступ извне)
4. Настроить firewall
5. Запустить и включить автозагрузку
6. Проверка работы
7. Доступ к веб-интерфейсу
⚠️ Сразу задайте пароль в Настройки → Доступ к графическому интерфейсу
8. Управление службой
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. Обновление
Как правильно – имплантат или имплант?
Оба варианта являются нормативными и зафиксированы в орфографических словарях русского языка
Кратко:
|
Форма
|
Статус
|
Примечание
|
|---|---|---|
|
имплантат
|
✅ правильно
|
Полная форма, от лат. implantare («всаживать»), чаще используется в научной и медицинской литературе mel.fm
|
|
имплант
|
✅ правильно
|
Краткая форма, заимствована из английского implant, допустима в разговорной и профессиональной речи www.ekburg.ru
|
|
имплантант
|
❌ ошибка
|
Такого слова в русском языке нет; суффикс -ант обычно обозначает лицо (лаборант, музыкант), поэтому форма логически несостоятельна gramota.ru
|
Рекомендации по употреблению:
- В официальных документах, научных статьях, медицинской документации предпочтительнее имплантат.
- В устной речи, рекламе, общении с пациентами допустимо имплант — это нейтральный, более краткий вариант
www.belstom.by
.
- Избегайте формы имплантант — это распространённая орфографическая ошибка
www.ekburg.ru
.
Add Europe/Moscow timezone in Maria DB
mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root -p mysql
Enter password:
root@hestia:~# mariadb -u root -p -e “SELECT Name FROM mysql.time_zone_name WHERE Name = ‘Europe/Moscow’;”
Enter password:
+—————+
| Name |
| Europe/Moscow |
+—————+
SSL не обновляется
Что делать, если установили сертификат, с ним все хорошо, а щначок безопасностии Google Chrome красный?
Все очень просто!
chrome://net-internals/#sockets→ Flush socket poolschrome://net-internals/#dns→ Clear host cache
Changing Timezone in php
/etc/php/8.x/fpm/php.ini
=>
date.timezone = Europe/Moscow
=>
sudo systemctl restart php8.4-fpm
=>
sudo systemctl restart nginx