Приветствую, собираюсь делать партиционирование, zabbix последней версии, база уже 220 Gb (работает все равно шустро, но хаускипер долго чистит), нашел статью - http://unixadm.info/content/разбиени...;-zabbix-mysql я так понимаю бэкап делать нет смысла? т.к. выделено всего 320 гигов (виртуалка) и просто не влезет?, далее как я понял я к примеру хочу сохранить последнюю неделю инфы, т.е. к примеру секционирование запущу 27.07.2016 и интервал дней сделаю с 20 по 28, также не могу найти в статье через какой срок будет удаляться старая инфа? или все будет зависеть от настроек очитски в вебе?
Ad Widget
Collapse
Zabbix партиционирование
Collapse
X
-
Tags: None
-
думаю что в любом случае надо делать дамп, а потом уже удалить ненужные таблицы, но могу ошибаться, далее как я понял я к примеру хочу сохранить последнюю неделю инфы, т.е. к примеру секционирование запущу 27.07.2016 и интервал дней сделаю с 20 по 28, также не могу найти в статье через какой срок будет удаляться старая инфа? или все будет зависеть от настроек очитски в вебе?
на счёт очистки, в статье указано что его отключить нужно, очисткой ненужных данных занимается процедура drop_partitions, для каждой таблицы задаются свои параметры для очистки
https://www.zabbix.org/wiki/Docs/howto/mysql_partition - я когда делал партицирование, ориентировался на эту статью, на 3 версии заббикса всё корректно работает и от себя добавлю, что всё это дело надо повесить на встроенный планировщик(event_sheduler) в mysql -
Вы видимо как-то не так понимаете суть партицирования, после него заббиксе полностью перестает управлять хранением истории, и за этоначинают отвечать хранимые процедуры в mysqlПриветствую, собираюсь делать партиционирование, zabbix последней версии, база уже 220 Gb (работает все равно шустро, но хаускипер долго чистит), нашел статью - http://unixadm.info/content/разбиени...;-zabbix-mysql я так понимаю бэкап делать нет смысла? т.к. выделено всего 320 гигов (виртуалка) и просто не влезет?, далее как я понял я к примеру хочу сохранить последнюю неделю инфы, т.е. к примеру секционирование запущу 27.07.2016 и интервал дней сделаю с 20 по 28, также не могу найти в статье через какой срок будет удаляться старая инфа? или все будет зависеть от настроек очитски в вебе?Comment
-
разве? я думал только теряется работа хаускипера, а хранение истории в днях остается, если нет то как можно настроить удаление только после к примеру 90 дней. в остальном я верно предположил по поводу 7 дней?Comment
-
пробовал по этой статье начать, в главе "Stored Procedures" при вставке кода выдавал какую то ошибку, сейчас не помню на памятьдумаю что в любом случае надо делать дамп, а потом уже удалить ненужные таблицы, но могу ошибаться
на счёт очистки, в статье указано что его отключить нужно, очисткой ненужных данных занимается процедура drop_partitions, для каждой таблицы задаются свои параметры для очистки
https://www.zabbix.org/wiki/Docs/howto/mysql_partition - я когда делал партицирование, ориентировался на эту статью, на 3 версии заббикса всё корректно работает и от себя добавлю, что всё это дело надо повесить на встроенный планировщик(event_sheduler) в mysqlComment
-
зашел в mysql> и далее в этом контексте мне вставлять?
вставлять полностью?Code:DELIMITER $$ CREATE PROCEDURE `partition_create`(SCHEMANAME varchar(64), TABLENAME varchar(64), PARTITIONNAME varchar(64), CLOCK int) BEGIN /* SCHEMANAME = The DB schema in which to make changes TABLENAME = The table with partitions to potentially delete PARTITIONNAME = The name of the partition to create */ /* Verify that the partition does not already exist */ DECLARE RETROWS INT; SELECT COUNT(1) INTO RETROWS FROM information_schema.partitions WHERE table_schema = SCHEMANAME AND table_name = TABLENAME AND partition_description >= CLOCK; IF RETROWS = 0 THEN /* 1. Print a message indicating that a partition was created. 2. Create the SQL to create the partition. 3. Execute the SQL from #2. */ SELECT CONCAT( "partition_create(", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ",", CLOCK, ")" ) AS msg; SET @sql = CONCAT( 'ALTER TABLE ', SCHEMANAME, '.', TABLENAME, ' ADD PARTITION (PARTITION ', PARTITIONNAME, ' VALUES LESS THAN (', CLOCK, '));' ); PREPARE STMT FROM @sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; END IF; END$$ DELIMITER ;Comment
-
зашел в mysql> и далее в этом контексте мне вставлять?
вставлять полностью?Code:DELIMITER $$ CREATE PROCEDURE `partition_create`(SCHEMANAME varchar(64), TABLENAME varchar(64), PARTITIONNAME varchar(64), CLOCK int) BEGIN /* SCHEMANAME = The DB schema in which to make changes TABLENAME = The table with partitions to potentially delete PARTITIONNAME = The name of the partition to create */ /* Verify that the partition does not already exist */ DECLARE RETROWS INT; SELECT COUNT(1) INTO RETROWS FROM information_schema.partitions WHERE table_schema = SCHEMANAME AND table_name = TABLENAME AND partition_description >= CLOCK; IF RETROWS = 0 THEN /* 1. Print a message indicating that a partition was created. 2. Create the SQL to create the partition. 3. Execute the SQL from #2. */ SELECT CONCAT( "partition_create(", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ",", CLOCK, ")" ) AS msg; SET @sql = CONCAT( 'ALTER TABLE ', SCHEMANAME, '.', TABLENAME, ' ADD PARTITION (PARTITION ', PARTITIONNAME, ' VALUES LESS THAN (', CLOCK, '));' ); PREPARE STMT FROM @sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; END IF; END$$ DELIMITER ;Comment
-
Я недавно делал партиции.Приветствую, собираюсь делать партиционирование, zabbix последней версии, база уже 220 Gb (работает все равно шустро, но хаускипер долго чистит), нашел статью - http://unixadm.info/content/разбиени...;-zabbix-mysql я так понимаю бэкап делать нет смысла? т.к. выделено всего 320 гигов (виртуалка) и просто не влезет?, далее как я понял я к примеру хочу сохранить последнюю неделю инфы, т.е. к примеру секционирование запущу 27.07.2016 и интервал дней сделаю с 20 по 28, также не могу найти в статье через какой срок будет удаляться старая инфа? или все будет зависеть от настроек очитски в вебе?
Инструкция как я делал:
1. Сделали backup больших таблиц (history_uint, history, history_text, history_log, history_str)
mysqldump --no-create-info --lock-tables -u zabbix -p zabbix history_str > backup_history_str.sql
2. Очищаем таблицу (проще дропнуть таблицу и создать заново)
3. Слегка меняем структуры таблиц
ALTER TABLE `history_log` DROP PRIMARY KEY, ADD PRIMARY KEY (`itemid`,`id`,`clock`);
ALTER TABLE `history_log` DROP KEY `history_log_2`;
ALTER TABLE `history_text` DROP PRIMARY KEY, ADD PRIMARY KEY (`itemid`,`id`,`clock`);
ALTER TABLE `history_text` DROP KEY `history_text_2`;
4. Создаем partition table с делением по дням
ALTER TABLE `history_str` PARTITION BY RANGE( clock ) (
PARTITION p20160705 VALUES LESS THAN (UNIX_TIMESTAMP("2016-07-06 00:00:00")),
PARTITION p20160706 VALUES LESS THAN (UNIX_TIMESTAMP("2016-07-07 00:00:00")),
PARTITION p20160707 VALUES LESS THAN (UNIX_TIMESTAMP("2016-07-08 00:00:00")),
PARTITION p20160708 VALUES LESS THAN (UNIX_TIMESTAMP("2016-07-09 00:00:00"))
);
5. Загружаете из бекапа все таблицы
mysql -u zabbix -p zabbix < 20160704_history_log.sql
Готово
Теперь добавление новой партиции в ручном режиме
ALTER TABLE `history_str` ADD PARTITION (PARTITION p20160705 VALUES LESS THAN (UNIX_TIMESTAMP("2016-07-06 00:00:00")));
Удаление
ALTER TABLE `history_str` DROP PARTITION p20160627;
Теперь по подрезке БД, я не стал использовать процедуры в mysql, а написал скрипт по подрезке и созданию партиций, в скрипте использую команду по создание партиции:
mysql -u zabbix zabbix --execute="ALTER TABLE $TABLE DROP PARTITION p$DATE_OLD"
и аналогичная по созданию партиции,
теперь при необходимости увеличить/уменьшить кол-во хранения дней, правим одну цифру внутри скрипта...Comment
-
Хм. На выходных попробую, а создание и удаление все вручную будет? Скрипт скинете?Я недавно делал партиции.
Инструкция как я делал:
1. Сделали backup больших таблиц (history_uint, history, history_text, history_log, history_str)
mysqldump --no-create-info --lock-tables -u zabbix -p zabbix history_str > backup_history_str.sql
2. Очищаем таблицу (проще дропнуть таблицу и создать заново)
3. Слегка меняем структуры таблиц
alter table `history_log` drop primary key, add primary key (`itemid`,`id`,`clock`);
alter table `history_log` drop key `history_log_2`;
alter table `history_text` drop primary key, add primary key (`itemid`,`id`,`clock`);
alter table `history_text` drop key `history_text_2`;
4. Создаем partition table с делением по дням
alter table `history_str` partition by range( clock ) (
partition p20160705 values less than (unix_timestamp("2016-07-06 00:00:00")),
partition p20160706 values less than (unix_timestamp("2016-07-07 00:00:00")),
partition p20160707 values less than (unix_timestamp("2016-07-08 00:00:00")),
partition p20160708 values less than (unix_timestamp("2016-07-09 00:00:00"))
);
5. Загружаете из бекапа все таблицы
mysql -u zabbix -p zabbix < 20160704_history_log.sql
Готово
Теперь добавление новой партиции в ручном режиме
alter table `history_str` add partition (partition p20160705 values less than (unix_timestamp("2016-07-06 00:00:00")));
Удаление
alter table `history_str` drop partition p20160627;
Теперь по подрезке БД, я не стал использовать процедуры в mysql, а написал скрипт по подрезке и созданию партиций, в скрипте использую команду по создание партиции:
Mysql -u zabbix zabbix --execute="alter table $table drop partition p$date_old"
и аналогичная по созданию партиции,
теперь при необходимости увеличить/уменьшить кол-во хранения дней, правим одну цифру внутри скрипта...Comment
-
Там элементарный скрипт, пишится за 5 минут...
Вам нужно будет решить проблему с вводом пароля, и подстроить скрипт под свои особенности...
Code:date_old=`date +%y%m%d --date="(date) -8 day"` #Дата удаляемой партиции date1=`date +%y%m%d --date="(date) +1 day"` #Дата новой партиций date2=`date +%y-%m-%d --date="(date) +2 day"` #Дата окончания новой партиции tables="history_str# history_log# history_text# history# history_uint#" #Список таблиц mysql logfile="/etc/zabbix/scripts/drop_part.log" echo `date` >> ${logfile} for table in `echo $tables` do table1=`echo $table |cut -f1 -d#` #Удаление старой партиции count=`ls -lah /var/lib/mysql/zabbix/ | grep $table | wc -l` echo "Работаем с таблицей: $table кол-во партиций: $count" >>${logfile} echo "Удаляем партицию p$date_old" >>${logfile} [ "$count" -ge "8" ] && mysql -u zabbix zabbix --execute="alter table $table1 drop partition p$date_old" >>${logfile} 2>>${logfile} #Создание новой партиции echo "Создаём новую партицию" "p"$date1>>${logfile} part_new=`ls -lah /var/lib/mysql/zabbix/ | grep $table | grep p$date1 ` echo $part_new >>${logfile} [ "$part_new" = "" ] && mysql -u zabbix zabbix --execute="alter table $table1 add partition (partition p$date1 values less than (unix_timestamp('$date2 00:00:00')))" >>${logfile} 2>>${logfile} doneComment
-
ошибка может быть из-за знаков табуляции, которые скопировались вместе с кодом, по крайней мере у меня было так
а по поводу удаления, это настраивается при вызове процедуры
CALL partition_maintenance('zabbix', 'history', 28, 24, 14);
28 - максимальное количество дней сколько будут храниться партиции для этой таблицы, потом партиция удалится
24 - создавать партиции на каждые 24 часа
14 - число партиций, которые надо создать наперёд
это актуально для https://www.zabbix.org/wiki/Docs/howto/mysql_partitionComment
-
попробовал сделать, бэкапнул все в zip, далее начал делать предварительно копировав команды в блокнот, все вроде нормально но в итоге более mysql не запустился... плюнул нафиг после 3-х часов возни, переставил zabbix, лью бэкап обратно, в бэкапе все восстановиться? все шаблоны и устройства?ошибка может быть из-за знаков табуляции, которые скопировались вместе с кодом, по крайней мере у меня было так
а по поводу удаления, это настраивается при вызове процедуры
CALL partition_maintenance('zabbix', 'history', 28, 24, 14);
28 - максимальное количество дней сколько будут храниться партиции для этой таблицы, потом партиция удалится
24 - создавать партиции на каждые 24 часа
14 - число партиций, которые надо создать наперёд
это актуально для https://www.zabbix.org/wiki/Docs/howto/mysql_partitionComment
-
ну да, всё должно восстановитьсяпопробовал сделать, бэкапнул все в zip, далее начал делать предварительно копировав команды в блокнот, все вроде нормально но в итоге более mysql не запустился... плюнул нафиг после 3-х часов возни, переставил zabbix, лью бэкап обратно, в бэкапе все восстановиться? все шаблоны и устройства?Comment
-
а как долго льется бэкап? я его распаковал, он весом 90 гигов, mysqladmin pr показывает update history.str
объем на жестком растет понемногу, но уже 2 дня такCode:root@zabbix:~# mysqladmin pr +-------+------+-----------+--------+---------+------+--------+------------------------------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+--------+---------+------+--------+------------------------------------------------------------------------------------------------------+ | 1478 | root | localhost | zabbix | Query | 5 | update | INSERT INTO `history_str` VALUES (43644,1469562263,'Fa0/9',640212395),(43653,1469562263,'Fa0/23',640 | | 16368 | root | localhost | | Query | 0 | | show processlist | +-------+------+-----------+--------+---------+------+--------+------------------------------------------------------------------------------------------------------+
Comment
Comment