Перейти к содержимому

Скрипт удаления старых записей zabbix mysql

Описание таблиц занимающие обычно больше всего места в базе данных:

  • history хранит десятичные числа
  • history_uint — целые
  • history_str, history_text, history_log — текстовые данные
  • events — всевозможные события: проблемы, внутренние события, события авторегистрации и автообнаружения

Посмотреть последние 10 таблиц в базе Mysql, занимают больше всего места:

SELECT table_name,
       table_rows,
       data_length,
       index_length,
       round(((data_length + index_length) / 1024 / 1024 / 1024),2) "Size in GB"
FROM information_schema.tables
WHERE table_schema = "zabbix"
ORDER BY round(((data_length + index_length) / 1024 / 1024 / 1024),2) DESC
LIMIT 10;
+--------------------+------------+--------------+--------------+----------+
| table_name         | table_rows | data_length  | index_length | Size in GB |
+--------------------+------------+--------------+--------------+----------+
| history            | 5891805460 | 564957036544 | 212365344768 |     723.94 |
| trends_uint        | 3568850819 | 309184282624 |            0 |     287.95 |
| history_uint       | 2435751798 | 188120842240 |  74724212736 |     244.79 |
| trends             | 3086152586 | 259156721664 |            0 |     241.36 |
| history_text       |   42899531 |   8106672128 |   1563082752 |       9.01 |
| history_str        |    6972599 |    633356288 |    263454720 |       0.84 |
| items              |     976645 |    312311808 |    227213312 |       0.50 |
| alerts             |     164940 |    477102080 |     34717696 |       0.48 |
| auditlog           |    3260080 |    235945984 |    158466048 |       0.37 |
| items_applications |    1138278 |     86507520 |     85868544 |       0.16 |
+--------------------+------------+--------------+--------------+----------+
10 rows in set (0.004 sec)

Таблички занимающие много места мы определили. Создаем скрипт:

# mcedit /opt/clean_zabbix.sh

Вставляем следующие содержимое:

#!/bin/bash
User="zabbix"
Passwd="PASSWORDZabbix"
Date=`date -d $(date -d "-31 day" +%Y%m%d) +%s`
mysql -u${User} -p${Passwd} -e "
use zabbix;
DELETE FROM events WHERE 'clock' < $Date;
optimize table events;
DELETE FROM trends_uint WHERE 'clock' < $Date;
optimize table trends_uint;
DELETE FROM history WHERE 'clock' < $Date;
optimize table history;"

Сохраняем и делаем файл исполняемым:

# chmod +x /opt/clean_zabbix.sh

Запускаем скрипт.