Введение
Данная статья актуальна только для GEO.RITM с мобильными приборами (Voyager). Для GEO.RITM со стационарными приборами (Контакт GSM, Мега) данная статья не актуальна.
Формат хранения данных innodb в MySQL при удалении данных из БД освобождать место на диске. Но в MySQL есть возможность разбить все данные по частям (партициям), и в партициях хранить данные. Каждая партиция - отдельный файл. При очистке партиции размер файла партии обнуляется и место на диске освобождается. Подробнее про partition смотрите здесь.
При установке GEO.RITM, таблицы БД создаются с партициями, разбитыми по месяцам. Это означает, что:
- Партий всего 12;
- Все данные за все года одного месяца сохраняются в партицию этого месяца;
- Если есть необходимость в экономии места на диске (периодическое удаление данных), то гарантировано максимальное количество месяцев для хранения - 11 (в среднем будет доступно 11,5 месяцев данных).
Пример для партиции `mar` (март) - в неё записываются данные за все марты всех годов. Т.е. координаты приборов от и от и будут записаны в одну партицию - `mar` таблицы `georitm_data`.`points`.
Не все таблицы разбиваются на части. Разбиваются те, которые можно разделить по датам. Для БД voyager это таблицы RECORDS, CAN_RECORDS и SGN. Для БД georitm_data это таблицы OBJECT_EVENTS, OBJECT_PARAMETERS, POINTS. Вы можете хранить данные 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:
Установите утилиту mailx;
yum install mailx
- Распакуйте содержимое partition_script.zip в /root/
- Отредактируйте скрипты sh - вместо mybox@ya.ru укажите ваш почтовый ящик, вместо smtp.ritm.ru ваш почтовый сервер;
Предоставьте права на выполнение файлов 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
- Добавьте в cron расписание:Или скопируйте файл root в /var/spool/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
Не забывайте после последней строки добавить перенос строки ↵
- Предоставьте права на чтение cron:
chmod 600 /var/spool/cron/root
В итоге по расписанию в последний день каждого месяца в 09:00 будут выполнятся очистка партиций на БД georirm_data и voyager. Далее будет отправляться письмо на mybox@ya.ru в котором показано сколько место занято до очистки и сколько места занято после очистки в разделе /db
Если имя БД отличается, либо БД разнесены, вы можете отредактировать файлы sql.
Связанные статьи: