Ad Widget

Collapse

Настройка mysql

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • nikitos35
    Senior Member
    • Jun 2014
    • 166

    #1

    Настройка mysql

    Здравствуйте!
    Помогите, пожалуйста, настроить чистый mysql для zabbix
    Раньше пользовался скаченным vhdx для заббикса, но в один момент база разрослась, заняла все место на жестком и заббикс встал.
    На текущий момент имею чистый debian 8 jessie + mysql 5.5.50 + созданная база zabbix (по мануалу)
    Какие действия необходимо сделать на mysql чтобы в будущем можно было выполнить манипуляции по очистке базы или оптимизации занятого места?
    В одной из тем предложили вариант действий с текущей базой но мне это не особо понятно.
    У меня раздел под базу 40 гигов, после перехода на 3.0.3 стали проблемы с нехваткой места, т.к. неадекватно работатал Хаускипер, в итоге мы пришли к тому чтоб избавится от Housekeeper'a и переделать базу данных на партиции.
    Поищите как отключить Хаускипер на 2.4, в 3.0 появилась возможность с помощью переменной HousekeepingFrequency=0

    А теперь наше решение по переводу на партиции:

    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;

    Теперь осталось вам автоматизировать создание и удаление партици, свой скрипт не буду приводить ;-)
    В линуксных системах новичок)
    Спасибо!
  • sersad
    Senior Member
    • May 2009
    • 518

    #2
    в официальной документации есть все про партиции, дока вроде охватывает только 2.4, но для 3.х она тоже справедлива.
    Join the friendly and open Zabbix community on our forums and social media platforms.

    Работая у крупнейшего провайдера РФ столкнулся с ситуацией, что происходит обращение абонента о проблемах в недалеком прошлом, т.е. вчера все было плохо, а сейчас заработало. Что делать в этом случае?...

    Стратегия настройки mysql
    движок innodb
    innodb_file_per_table
    половину оперативы на innodb_buffer_pool_size
    ну и дальше курить маны.
    Для особого шика перейти на MariaDB

    Comment

    • nikitos35
      Senior Member
      • Jun 2014
      • 166

      #3
      Спасибо за ответ, но для меня это дремучий лес
      Я правильно понимаю свои действия:
      1. Делаю бэкап базы zabbix
      mysqldump --no-create-info --lock-tables -u zabbix -p zabbix history_str > backup_history_str.sql

      mysqldump --no-create-info --lock-tables -u zabbix -p zabbix history_str > history_uint
      mysqldump --no-create-info --lock-tables -u zabbix -p zabbix history_str > history
      mysqldump --no-create-info --lock-tables -u zabbix -p zabbix history_str > history_text
      mysqldump --no-create-info --lock-tables -u zabbix -p zabbix history_str > history_log

      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. Создаем партии по дням
      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
      6. добавление и удаление
      Теперь добавление новой партиции в ручном режиме
      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;
      это надо автоматизировать или скл сам будет делать?

      Comment

      Working...