Введение

Данная статья актуальна только для GEO.RITM с мобильными приборами (Voyager). Для GEO.RITM со стационарными приборами (Контакт GSM, Мега) данная статья не актуальна.

Формат хранения данных innodb в MySQL при удалении данных из БД освобождать место на диске. Но в MySQL есть возможность разбить все данные по частям (партициям), и в партициях хранить данные. Каждая партиция - отдельный файл. При очистке партиции размер файла партии обнуляется и место на диске освобождается. Подробнее про partition смотрите здесь.

При установке GEO.RITM, таблицы БД создаются с партициями, разбитыми по месяцам. Это означает, что:

  • Партий всего 12;
  • Все данные за все года одного месяца сохраняются в партицию этого месяца;
  • Если есть необходимость в экономии места на диске (периодическое удаление данных), то гарантировано максимальное количество месяцев для хранения - 11 (в среднем будет доступно 11,5 месяцев данных).

Пример для партиции `mar` (март) - в неё записываются данные за все марты всех годов. Т.е. координаты приборов от и от и будут записаны в одну партицию - `mar` таблицы `georitm_data`.`points`.

Не все таблицы разбиваются на части. Разбиваются те, которые можно разделить по датам. Для БД voyager это таблицы RECORDSCAN_RECORDS и SGN. Для БД georitm_data это таблицы OBJECT_EVENTSOBJECT_PARAMETERSPOINTS. Вы можете хранить данные 11 месяцев, и каждый месяц удалять партицию, которая старше текущей на 11 месяцев.

МесяцНазвание партиции
Январьjan
Февральfeb
Мартmar
Апрельapr
Майmay
Июньjun
Июльjul
Августaug
Сентябрьsep
Октябрьoct
Ноябрьnov
Декабрьdec

Очистка партиций вручную

Для удаления данных за предыдущие периоды (месяцы) необходимо выполнить запрос типа:

ALTER TABLE table_name TRUNCATE PARTITION partition_name;

Перед выполнением запросов желательно остановить всё ПО, подключенное к БД: iserver, iolimpstroy, iegts, georitm и т.п.
Например в конце ноября можно удалить партиции за декабрь следующими запросами:

ALTER TABLE `voyager`.`records` TRUNCATE PARTITION `dec`;
ALTER TABLE `voyager`.`can_records` TRUNCATE PARTITION `dec`;
ALTER TABLE `voyager`.`sgn` TRUNCATE PARTITION `dec`;
ALTER TABLE `georitm_data`.`object_events` TRUNCATE PARTITION `dec`;
ALTER TABLE `georitm_data`.`object_parameters` TRUNCATE PARTITION `dec`;
ALTER TABLE `georitm_data`.`points` TRUNCATE PARTITION `dec`;
DELETE FROM `georitm_data`.`parkmove` WHERE MONTH(`date_to`) = 12;

Другой пример - в конце мая можно удалить партиции за июнь следующими запросами:

ALTER TABLE `voyager`.`records` TRUNCATE PARTITION `jun`;
ALTER TABLE `voyager`.`can_records` TRUNCATE PARTITION `jun`;
ALTER TABLE `voyager`.`sgn` TRUNCATE PARTITION `jun`;
ALTER TABLE `georitm_data`.`object_events` TRUNCATE PARTITION `jun`;
ALTER TABLE `georitm_data`.`object_parameters` TRUNCATE PARTITION `jun`;
ALTER TABLE `georitm_data`.`points` TRUNCATE PARTITION `jun`;
DELETE FROM `georitm_data`.`parkmove` WHERE MONTH(`date_to`) = 6;

Автоматическая очистка партиций

Процесс очистки партиций можно автоматизировать. Для этого на ВМ с GEO.RITM:

  1. Установите утилиту mailx;

    yum install mailx
  2. Распакуйте содержимое partition_script.zip в /root/
  3. Отредактируйте скрипты sh - вместо mybox@ya.ru укажите ваш почтовый ящик, вместо smtp.ritm.ru ваш почтовый сервер;
  4. Предоставьте права на выполнение файлов sh:

    chmod 744 /root/cp_aug.sh /root/cp_dec.sh /root/cp_feb.sh /root/cp_jan.sh /root/cp_jul.sh /root/cp_jun.sh /root/cp_mar.sh /root/cp_may.sh /root/cp_nov.sh /root/cp_oct.sh /root/cp_sep.sh /root/cp_apr.sh
  5. Добавьте в cron расписание:
    /var/spool/cron/root
    00 09 31 7 * /root/cp_aug.sh
    00 09 31 8 * /root/cp_sep.sh
    00 09 30 9 * /root/cp_oct.sh
    00 09 31 10 * /root/cp_nov.sh
    00 09 30 11 * /root/cp_dec.sh
    00 09 31 12 * /root/cp_jan.sh
    00 09 31 1 * /root/cp_feb.sh
    00 09 28 2 * /root/cp_mar.sh
    00 09 31 3 * /root/cp_apr.sh
    00 09 30 4 * /root/cp_may.sh
    00 09 31 5 * /root/cp_jun.sh
    00 09 30 6 * /root/cp_jul.sh
    Или скопируйте файл root в /var/spool/cron/ (если никаких расписаний ещё нет).

    Не забывайте после последней строки добавить перенос строки ↵

  6. Предоставьте права на чтение cron:
    chmod 600 /var/spool/cron/root

В итоге по расписанию в последний день каждого месяца в 09:00 будут выполнятся очистка партиций на БД georirm_data и voyager. Далее будет отправляться письмо на mybox@ya.ru в котором показано сколько место занято до очистки и сколько места занято после очистки в разделе /db
Если имя БД отличается, либо БД разнесены, вы можете отредактировать файлы sql.

Связанные статьи: