Автоматическое создание партиций в MySQL для Zabbix

Введение

После каждой установки Zabbix, лучше сразу провести партиционирование таблиц с данными истории для более гибкого управления. Об этом я уже рассказывал в своей статье. Такой вариант меня устраивал до тех пор, пока я разобрался и настроил это в одном Zabbix. Когда же приходилось тратить дополнительное время на партиции в одной, второй, третьей… n-ой инсталляциях, я решил, что пора автоматизировать решение. Итак, я написал скрипт для упрощения работ по партиционированию таблиц в Zabbix.

Скрипт создаёт:

  • партиции по дням как для таблиц с уже существующими данными, так и для пустых;
  • таблицы в MySQL для управления партициями;
  • заполняет таблицы информацией для хранения партиций согласно значениям из переменных;
  • создаёт процедуры MySQL по созданию и удалению партиций;
  • создаёт планировщик для автоматического запуска.
  • партиции создаются для следующих таблиц: history history_uint history_str history_text history_log trends trends_uint

Требования для успешного выполнения скрипта

  1. Доступ в MySQL без ввода пароля для пользователя, от которого будет запускаться скрипт (или же поправить в самом скрипте доступ)
  2. Возможность записи в директорию /tmp для хранения промежуточных данных с SQL-запросами
  3. Заполненные переменные history_…_cnt и trends_cnt для нужного времени хранения партиций каждой партиционируемой таблицы. По умолчанию значения уже заданы, подлежат изменению
  4. Включенный планировщик в my.cnf или через SET GLOBAL event_scheduler = ON (надо прописать в конфиг);
  5. Заполненная переменная evnt_start с датой и временем запуска планировщика в MySQL. По умолчанию также уже заполнена;
  6. Кодировка БД и сервера 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, т.к. это проверено.

Ссылки

https://github.com/rmn-lux/mysql-bash-partitioning

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *