Введение
После каждой установки Zabbix, лучше сразу провести партиционирование таблиц с данными истории для более гибкого управления. Об этом я уже рассказывал в своей статье. Такой вариант меня устраивал до тех пор, пока я разобрался и настроил это в одном Zabbix. Когда же приходилось тратить дополнительное время на партиции в одной, второй, третьей… n-ой инсталляциях, я решил, что пора автоматизировать решение. Итак, я написал скрипт для упрощения работ по партиционированию таблиц в Zabbix.
Скрипт создаёт:
- партиции по дням как для таблиц с уже существующими данными, так и для пустых;
- таблицы в MySQL для управления партициями;
- заполняет таблицы информацией для хранения партиций согласно значениям из переменных;
- создаёт процедуры MySQL по созданию и удалению партиций;
- создаёт планировщик для автоматического запуска.
- партиции создаются для следующих таблиц: history history_uint history_str history_text history_log trends trends_uint
Требования для успешного выполнения скрипта
- Доступ в MySQL без ввода пароля для пользователя, от которого будет запускаться скрипт (или же поправить в самом скрипте доступ)
- Возможность записи в директорию /tmp для хранения промежуточных данных с SQL-запросами
- Заполненные переменные history_…_cnt и trends_cnt для нужного времени хранения партиций каждой партиционируемой таблицы. По умолчанию значения уже заданы, подлежат изменению
- Включенный планировщик в my.cnf или через SET GLOBAL event_scheduler = ON (надо прописать в конфиг);
- Заполненная переменная evnt_start с датой и временем запуска планировщика в MySQL. По умолчанию также уже заполнена;
- Кодировка БД и сервера utf8 и представление utf8_general_ci по умолчанию. *
После выполнения скрипта
Отключить хаускипер в веб-интерфейсе забикса для истории и динамики изменений.
Примечания
Не забывайте сделать бэкап всего и вся! Перед выполнением стоит понимать, что такое партиции и как они создаются.
* Насчёт кодировок и представлений. По умолчанию процедуры создаются с представлением utf8_general_ci и если база и сервер в иной кодировке, возникнет ошибка “ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=’ ” при вызове процедур. Я менял кодировки и представления базы, сервера, таблиц и процедур на utf8_unicode_ci, но в таком случае всё равно возникала эта ошибка (для MySQL 5.7.26, на других версихя не проверял), поэтому данный скрипт сработает без ошибок только для представления utf8_general_ci и MySQL 5.7.26, т.к. это проверено.