удалить данные из таблицы events

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

    удалить данные из таблицы events

    При по пытки отчистить получаю ошибку
    MariaDB [zabbix2017]> truncate table events;
    ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`zabbix2017`.`acknowledges`, CONSTRAINT `c_acknowledges_2` FOREIGN KEY (`eventid`) REFERENCES `zabbix2017`.`events` (`eventid`))
    Нормального решения так и не нашел.

    #2
    Originally posted by voler View Post
    При по пытки отчистить получаю ошибку


    Нормального решения так и не нашел.
    Здравствуйте,

    Для чего Вы это хотите сделать? Пока есть внешний ключ и взаимосвязь с таблицей events, - СУБД не позволит это сделать. Логичнее использовать партиционирование с ротацией на регулярной основе.

    Comment


      #3
      Доброго дня!
      Возможно автор хочет очистить таблицу событий по той же причине, по которой это потребовалось сделать мне. У меня некоторое время назад, после обновления mysql, начались проблемы с бэкапом баз перконой. mysql начал тупо виснуть. Я пока отключил бэкапы, но, видимо в результате какого-то сбоя в записи истории, а может еще чего-то, у меня начали "залипать" события. То есть триггер сработал по аварии, а когда авария уходит, триггер остается висеть в событиях бесконечно долго. Если при этом зайти в настройки объекта, отсоединить и очистить присоединенный шаблон, а затем присоединить его снова, очистив тем самым всю историю - триггер начинает работать корректно.
      Вот отсюда, возможно и вопрос, каким образом можно очистить список событий?.

      Я также не нашел корректного способа очистить события, кроме обнуления всей истории объекта с "залипшим" триггером.

      Comment


        #4
        Версия Zabbix/MySQL/Percona Xtrabackup?

        Comment


          #5
          mariadb-server-10.1 10.1.33+maria
          xtrabackup 2.3.10-1
          zabbix-server-mysql 3.2.11

          ubuntu 16.04.4 LTS

          Comment


          • kernbug
            kernbug commented
            Editing a comment
            целостность данных проверяли? у меня была как-то подобная ситуация, отказал массив ssd под бд, после восстановления файловой системы бд проработала 30 минут с кучей фантомных проблем для 40000 устройств, после этого откатывался на полный+инкрементальные за неделю, пятница была увлекательной .

          #6
          Проблемы начались после последнего обновления mariadb.

          Comment


            #7
            Тогда можно поставить вопрос по другому. У меня данная таблица весит 4гб, хочу узнать как понять какому узлу принадлежит наибольшее кол-во событий. Т.е. от наибольшего к наименьшему с выводом не больше 50
            Кто подскажет запрос?

            Comment


              #8
              Originally posted by voler View Post
              Тогда можно поставить вопрос по другому. У меня данная таблица весит 4гб, хочу узнать как понять какому узлу принадлежит наибольшее кол-во событий. Т.е. от наибольшего к наименьшему с выводом не больше 50
              Кто подскажет запрос?
              Можно посмотреть без запроса:
              https://www.zabbix.com/documentation...s/triggers_top

              Comment


                #9
                Посмотрел, как последовательно удалить данные?
                events | 4323.66 размер таблицы у меня вот такой.

                Comment


                  #10
                  Originally posted by voler View Post
                  Посмотрел, как последовательно удалить данные?
                  events | 4323.66 размер таблицы у меня вот такой.
                  На всякий случай, упомяну наличие встроенного 'Housekeeper' https://www.zabbix.com/documentation...ration/general

                  По умолчанию таблица `acknowledges` создается в 3.4 со следующим синтаксисом:
                  Code:
                  CREATE TABLE `acknowledges` (
                  
                    `acknowledgeid` bigint(20) unsigned NOT NULL,
                  
                    `userid` bigint(20) unsigned NOT NULL,
                  
                    `eventid` bigint(20) unsigned NOT NULL,
                  
                    `clock` int(11) NOT NULL DEFAULT '0',
                  
                    `message` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
                  
                    `action` int(11) NOT NULL DEFAULT '0',
                  
                    PRIMARY KEY (`acknowledgeid`),
                  
                    KEY `acknowledges_1` (`userid`),
                  
                    KEY `acknowledges_2` (`eventid`),
                  
                    KEY `acknowledges_3` (`clock`),
                  
                    CONSTRAINT `c_acknowledges_1` FOREIGN KEY (`userid`) REFERENCES `users` (`userid`) ON DELETE CASCADE,
                  
                    CONSTRAINT `c_acknowledges_2` FOREIGN KEY (`eventid`) REFERENCES `events` (`eventid`) ON DELETE CASCADE
                  
                  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
                  Это значит, что Вы можете просто выполнить:
                  Code:
                  MariaDB [zabbix]> delete from events;
                  
                  Query OK, 77 rows affected (0.05 sec)

                  Comment


                    #11
                    Целостность самих данных не проверял. Пробежался fast'ом. На предмет некорректно закрытых таблиц. Все было нормально, поскольку я, таки, остановил mysql, прадварительно пришибив застрявший xtrabackup. Заббикс сервер, после того как mysql запустился начал очень агрессивно туда сливать данные. IO стоял был в шесть раз более высоким чем обычный фон более часа. Что он там все это время делал, для меня осталось загадкой, поскольку за период "лежки" записей в базе нет.

                    Comment


                      #12
                      Мой вопрос остался не отвеченным, таблица весит 4323 мб. Удалить ее как написано в лоб рискованно. По Housekeeper мне известно вот как настроено HousekeepingFrequency=2, MaxHousekeeperDelete=1000,
                      В базе у меня почти 4 тысячи устройств.

                      Comment


                        #13
                        Originally posted by voler View Post
                        Мой вопрос остался не отвеченным, таблица весит 4323 мб. Удалить ее как написано в лоб рискованно. По Housekeeper мне известно вот как настроено HousekeepingFrequency=2, MaxHousekeeperDelete=1000,
                        В базе у меня почти 4 тысячи устройств.
                        Вам следует определиться, что Вы хотите. Из предыдущих сообщений у меня сложилось впечатление, что Вам необходимо почистить таблицу events от всего и вся, т.к. таблица занимает 4Гб. При этом Вы хотели сделать truncate... . Объясните, в чем у Вас проблема?

                        Comment


                          #14

                          delete from events; Вы предложили. Т.е. грохнуть все в ней и создать заново?

                          Comment


                            #15
                            Originally posted by voler View Post
                            delete from events; Вы предложили. Т.е. грохнуть все в ней и создать заново?
                            Здравствуйте,

                            Внешний ключ `c_acknowledges_2` таблицы `acknowledges` не мешает удалить данные в таблице `events` исходя из команды, что создает таблицу `acknowledges`.
                            Подробно о том, что выполняет команда 'delete': http://www.mysql.ru/docs/man/DELETE.html
                            Что делает 'truncate': http://www.mysql.ru/docs/man/TRUNCATE.html
                            TRUNCATE TABLE выполняет последовательность "COMMIT ; DELETE FROM table_name"
                            TRUNCATE TABLE имеет следующие отличия от DELETE FROM ...:
                            • Эта операция удаляет и воссоздает таблицу, что намного быстрее, чем поочередное удаление строк.
                            • Операция является нетранзакционной; если одновременно выполняется транзакция или активная блокировка таблицы, то можно получить ошибку.
                            • Не возвращает количество удаленных строк.
                            • Пока существует корректный файл `table_name.frm', таблицу можно воссоздать с его с помощью, даже если файлы данных или индексов повреждены.
                            Если задача сэкономить пространство, то необходимо настроить партиционирование (можно просто дропнуть лишние часы/дни/недели/месяцы) или 'housekeeper' через веб-интерфейс, как указано здесь (пункт 3): https://www.zabbix.com/documentation...ration/general

                            Comment

                            Announcement

                            Collapse
                            No announcement yet.
                            Working...
                            X