8(499)-709-97-83
Работаем с 8:00 до 19:00

Zabbix занимает много места. Что делать?

  • 29 июля 2015

Работая с Zabbix, со временем появляется проблема связанная с отсутствием свободного места на сервере. Это связано с хранением большого объема данных. Начав изучать систему, мы нашли, что файл ibdata1 очень сильно разросся. Погуглив и почитав различные форумы, мы нашли пару решений.

1) Сократить период хранения данных в базе и использовать Housekeeper

2) Разбить файл ibdata1 на несколько файлов.

Как говорится начнем с конца, а именно с файла ibdata1.

Файл ibdata1 является частью InnoDB, и хранит в себе данные таблиц, их индексы и другую служебную информацию. Со временем – этот файл может увеличиться до совсем неприличных размеров. Что бы упростить работу с этим файлов – можно разделить его, создав отдельный файл для каждой базы данных и таблицы, с помощью опции innodb_file_per_table.

Перейдем к настройке:

Как и раньше наш Zabbix крутится на ОС Ubuntu 14.10

Узнаем какая у нас версия MySQL

sudo mysql --version

На выводе получаем

mysql Ver 14.14 Distrib 5.5.41, for debian-linux-gnu (x86_64) using readline 6.3

Начиная с версии 5.6 опция innodb_file_per_table включена по умолчанию, но т.к. у нас версия MySQL 5.5, то придется сделать некоторые манипуляции.

Создадим директорию куда будут сохранятся бэкапы:

sudo mkdir -p /data/mysql/backup

Даем временные права на папку

sudo chmod 777 /data/mysql/backup
cd /data/mysql/backup

Останавливаем сервис Zabbix

sudo service zabbix-server stop

Далее создадим резервную копию всех имеющихся баз данных.

mysqldump -uroot -p -ERA --flush-privileges > backupmysql.sql

Проверяем созданный файл.

ls -la
-rw-rw-r-- 1 zabbix zabbix 2971988984 июля 20 12:16 backupmysql.sql

Смотрим какие базы данных у нас есть.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| zabbix |
+--------------------+
4 rows in set (0.01 sec)

Далее удаляем все базы данных, кроме mysql и information_schema.

mysql -uroot -p -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema | gawk '{print "drop database " $1 "; select sleep(0.1);"}' | mysql -uroot -p

Проверяем базы:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
+--------------------+
2 rows in set (0.00 sec)

Все удалилось.

Тормозим сервис MySQL.

sudo service mysqld stop

Далее удаляем старые файлы.

sudo rm /var/lib/mysql/ibdata1
sudo rm /var/lib/mysql/ib_logfile0
sudo rm /var/lib/mysql/ib_logfile1

Далее редактируем файл /etc/mysql/my.cnf

sudo nano /etc/mysql/my.cnf

В блоке [mysqld] добавляем строку:

innodb_file_per_table = 1
innodb_data_file_path=ibdata1:10M:autoextend:max:15G

Тут указывается, что InnoDB должен создавать отдельные файлы .ibd и .frm для хранения информации и индексов для каждой таблица, вместо того, что бы хранить их все в одном файле

Второй параметр – задаёт размещение файла ibdata1 (т.к. путь не указан – будет использоваться “хранилище” MySQL – /var/lib/mysql), с начальным размером в 10МБ, и автоматическим увеличением при необходимости до максимум 15ГБ

Можно указать отдельный путь хранения файлов, например на новом дисковом пространстве:

innodb_data_file_path=/data/ibdata1:2000M;/data/ibdata2:2000M /data/ibdata3:100M:autoextend:max:2000M

Указанная команда создаст 3 файла ibdata1, ibdata2 по 2Гб каждый и файл ibdata3 размером 100Мб. Если этого будет мало, файл ibdata3 будет рости до 2Гб.

Запускаем сервис MySQL.

sudo service mysql start

Восстанавливаем базы данных.

sudo mysql -uroot -p < /data/mysql/backup/backupmysql.sql

Запускаем утилитку MySQL_Upgrade, для генерации новой базы performance_schema.

mysql_upgrade -uroot -p --force

Теперь у нас каждая база хранится в отдельном файле, при этом мы освободили место.

Теперь рассмотрим, как сократить период хранения данных в Zabbix.

В GUI Zabbix переходим в каталог Administration->General->Housekeeping.

Все значения переводим в 15, т.е. наши данные будут хранится в БД 15 дней, т.е. сама база будет очень медленно расти.


Необходимо, чтобы стояли все галки Enable internal housekeeping, таким образом сам Zabbix будет чистить базу MySQL от старых данных.

 
Powered by SEO CMS ver.: 23.1 TOP 2 (opencartadmin.com)