Ad Widget

Collapse

Прошу помощи в очистке базы

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sinclaus
    Member
    • Oct 2010
    • 35

    #1

    Прошу помощи в очистке базы

    Дело в чём: база заббикса неприлично разрослась (в данный момент 14.69 GB). Моя главная специализация - киски и джуниперы, с базами знаком очень слабо. Принцип очистки понимаю - остановить заббикс, вытереть из базы данные по евентам, истории и юнитам истории за прошлые года, експорт, импорт - и база сжалась. Но вот тереть побаиваюсь, что не учту взаимозависимости. Идеально бы строку select .... delete, а?
  • yukra
    Senior Member
    • Apr 2013
    • 1359

    #2
    0) Делаем бэкап!

    1) Смотрим таблицы history* (5 шт) и trends* (2 шт) и видим что везде есть столбец clock. В нем храниться время снятия айтема в unixtime.
    Code:
    mysql> show create table history_uint\G
    *************************** 1. row ***************************
           Table: history_uint
    Create Table: CREATE TABLE `history_uint` (
      `itemid` bigint(20) unsigned NOT NULL,
      `clock` int(11) NOT NULL DEFAULT '0',
      `value` bigint(20) unsigned NOT NULL DEFAULT '0',
      `ns` int(11) NOT NULL DEFAULT '0',
      KEY `history_uint_1` (`itemid`,`clock`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0,00 sec)
    
    mysql> select clock from history_uint limit 10\G
    *************************** 1. row ***************************
    clock: 1418625471
    *************************** 2. row ***************************
    clock: 1418626071
    *************************** 3. row ***************************
    clock: 1418626671
    *************************** 4. row ***************************
    clock: 1418627271
    *************************** 5. row ***************************
    clock: 1418627871
    *************************** 6. row ***************************
    clock: 1418628471
    *************************** 7. row ***************************
    clock: 1418629071
    *************************** 8. row ***************************
    clock: 1418629671
    *************************** 9. row ***************************
    clock: 1418630271
    *************************** 10. row ***************************
    clock: 1418630871
    2) Определяем дату, до которой будем чистить. Например пусть это будет 01.01.2014. Смотрим его unixtime:
    Code:
    $ date -d '2014-01-01 00:00:00' +%s
    1388520000
    . Не забываем про смещение из-за часового пояса, но в данном случае я так понимаю оно нам не критично

    3) Говорим
    Code:
    mysql> DELETE FROM history WHERE clock < 1388520000 ; 
    Query OK, 0 rows affected (56,00 sec)
    , повторяем для всех 7ми таблиц (или только нужных) (у меня нет данных за начало года, данная инсталяция развернута совсем недавно)

    4) Думаем о хаускипере или секционировании БД.

    Comment

    • sinclaus
      Member
      • Oct 2010
      • 35

      #3
      Бэкап делается самостоятельно, без всякого участия подлого сознания, bacula работает. Если таблицы независимы, задача сильно упрощается, спасибо.

      Comment

      Working...