Ad Widget

Collapse

Проблема с mysql

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Aksel
    Senior Member
    • Aug 2014
    • 101

    #1

    Проблема с mysql

    Добрый вечер, уважаемые форумчане.

    Мне нужна срочно Ваша помощь, т.к. я дурень убил одну таблицу mysql.
    У меня в сети 2700 хостов, они автоматически были заведены и имели вид:

    Code:
    Имя узла сети - IP-адрес
    Видимое имя - IP-адрес
    Начальство начало требовать, чтобы я заменил видимое имя, на нормальный адрес.

    Начал копать mysql, нашел таблицу hosts, в ней меня интересовали поля name. Скопировал таблицу (phpmyadmin), дал ей название hosts1, эскпортировал ее, изменил как мне нужно поле name, импортировал.

    Дальше старую таблицу переименовал из hosts в hosts_old, а таблицу hosts1 в hosts. Зашел в заббикс обрадовался что все работает, и закрыл это дело.

    Прошло какое то время и мне потребовалось создать новый хост, а он не создается, пишет ошибку:


    Code:
    Error in query [INSERT INTO hosts_groups (hostid,groupid,hostgroupid) VALUES ('12886','18','9496')] [Cannot add or update a child row: a foreign key constraint fails (`zabbix`.`hosts_groups`, CONSTRAINT `c_hosts_groups_1` FOREIGN KEY (`hostid`) REFERENCES `hosts_old` (`hostid`) ON DELETE CASCADE)]
    Ошибка при выполнении SQL запроса "INSERT INTO hosts_groups (hostid,groupid,hostgroupid) VALUES ('12886','18','9496')".
    Как я понимаю, он пытается ссылаться на старую таблицу, а в новой ничего не хочет делать. Все бы ничего скажете Вы, верни старую таблицу и все заработает, просто имена будут по старому, но по глупости в нее пустил свои кривые руки и покрашил столбик name. То есть все хосты не имеют теперь имени.



    Подскажите, что сделать? Может как то можно изменить путь, чтобы при создании нового хоста он не ссылался на старую таблицу.

    Или можно как то восстановить столбик name на старой таблице (есть файл hosts.csv, но при импорте он пишет

    Code:
    #1451 - Cannot delete or update a parent row: a foreign key constraint fails (`zabbix`.`graphs`, CONSTRAINT `c_graphs_3` FOREIGN KEY (`ymax_itemid`) REFERENCES `items` (`itemid`))
    )?



    Заранее огромное спасибо за помощь. Я надеюсь что Вы мне поможете. Мужики с меня пиво.
  • Zentarim
    Senior Member
    • Mar 2012
    • 526

    #2
    Не в обиду будет сказано, но ты себе, считай, голову отпилил и просишь пришить на место

    Я так понимаю, что ты похерил отношения между таблицами. Посмотри в скрипте создания базы что за отношения у этих двух таблиц.

    P.s. Это как минимум ...

    Comment

    • Aksel
      Senior Member
      • Aug 2014
      • 101

      #3
      Originally posted by Zentarim
      Не в обиду будет сказано, но ты себе, считай, голову отпилил и просишь пришить на место

      Я так понимаю, что ты похерил отношения между таблицами. Посмотри в скрипте создания базы что за отношения у этих двух таблиц.
      Все правильно говорите. Дело в том, что я очень плохо разбираюсь в myslq.

      Посмотри в скрипте создания базы что за отношения у этих двух таблиц.

      Это где смотреть?

      Comment

      • Zentarim
        Senior Member
        • Mar 2012
        • 526

        #4
        в исходниках скрипт schema.sql
        для 2.2.4 например навскидку:
        Code:
        CREATE INDEX `hosts_1` ON `hosts` (`host`);
        CREATE INDEX `hosts_2` ON `hosts` (`status`);
        CREATE INDEX `hosts_3` ON `hosts` (`proxy_hostid`);
        CREATE INDEX `hosts_4` ON `hosts` (`name`);
        CREATE INDEX `hosts_5` ON `hosts` (`maintenanceid`);
        ALTER TABLE `hosts` ADD CONSTRAINT `c_hosts_1` FOREIGN KEY (`proxy_hostid`) REFERENCES `hosts` (`hostid`);
        ALTER TABLE `hosts` ADD CONSTRAINT `c_hosts_2` FOREIGN KEY (`maintenanceid`) REFERENCES `maintenances` (`maintenanceid`);
        ALTER TABLE `hosts` ADD CONSTRAINT `c_hosts_3` FOREIGN KEY (`templateid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `group_prototype` ADD CONSTRAINT `c_group_prototype_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `screens` ADD CONSTRAINT `c_screens_1` FOREIGN KEY (`templateid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `drules` ADD CONSTRAINT `c_drules_1` FOREIGN KEY (`proxy_hostid`) REFERENCES `hosts` (`hostid`);
        ALTER TABLE `applications` ADD CONSTRAINT `c_applications_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `httptest` ADD CONSTRAINT `c_httptest_2` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `interface` ADD CONSTRAINT `c_interface_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `items` ADD CONSTRAINT `c_items_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `opcommand_hst` ADD CONSTRAINT `c_opcommand_hst_2` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`);
        ALTER TABLE `optemplate` ADD CONSTRAINT `c_optemplate_2` FOREIGN KEY (`templateid`) REFERENCES `hosts` (`hostid`);
        ALTER TABLE `hostmacro` ADD CONSTRAINT `c_hostmacro_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `hosts_groups` ADD CONSTRAINT `c_hosts_groups_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `hosts_groups` ADD CONSTRAINT `c_hosts_groups_2` FOREIGN KEY (`groupid`) REFERENCES `groups` (`groupid`) ON DELETE CASCADE;
        ALTER TABLE `hosts_templates` ADD CONSTRAINT `c_hosts_templates_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `hosts_templates` ADD CONSTRAINT `c_hosts_templates_2` FOREIGN KEY (`templateid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `maintenances_hosts` ADD CONSTRAINT `c_maintenances_hosts_1` FOREIGN KEY (`maintenanceid`) REFERENCES `maintenances` (`maintenanceid`) ON DELETE CASCADE;
        ALTER TABLE `maintenances_hosts` ADD CONSTRAINT `c_maintenances_hosts_2` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `autoreg_host` ADD CONSTRAINT `c_autoreg_host_1` FOREIGN KEY (`proxy_hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `dhosts` ADD CONSTRAINT `c_dhosts_1` FOREIGN KEY (`druleid`) REFERENCES `drules` (`druleid`) ON DELETE CASCADE;
        ALTER TABLE `dservices` ADD CONSTRAINT `c_dservices_1` FOREIGN KEY (`dhostid`) REFERENCES `dhosts` (`dhostid`) ON DELETE CASCADE;
        ALTER TABLE `host_inventory` ADD CONSTRAINT `c_host_inventory_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `host_discovery` ADD CONSTRAINT `c_host_discovery_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE;
        ALTER TABLE `host_discovery` ADD CONSTRAINT `c_host_discovery_2` FOREIGN KEY (`parent_hostid`) REFERENCES `hosts` (`hostid`);
        Для вашей версии, скорее всего, надо что-то другое. Но я бы на вашем месте не порол горячку, а тормознул базу, снял бэкап и срочно побежал бы искать программиста БД. Имея на руках этот скрипт возможно он сможет восстановить базу.

        Да, и если не знаешь SQL НА КОЙ ХРЕН ТЫ ВЛЕЗ В САМУ БАЗУ БЕЗ БЭКАПА, СУМАСШЕДШИЙ?
        Last edited by Zentarim; 11-12-2014, 00:37.

        Comment

        • Zentarim
          Senior Member
          • Mar 2012
          • 526

          #5
          Возможно глупый вариант:
          0) сделать, наконец, бэкап хоть какой-то базы
          1) Забэкапировать СОДЕРЖИМОЕ всех таблиц (как - гугл в помощь)
          2) Дропнуть поврежденную базу
          3) Создать чистую новую базу с теми же настройками (кодировка, пароли etc.)
          4) Залить содержимое старых таблиц в новую базу

          Никогда так не пробовал делать, но вам то уже терять нечего

          Comment

          • Aksel
            Senior Member
            • Aug 2014
            • 101

            #6
            Originally posted by Zentarim
            Возможно глупый вариант:
            0) сделать, наконец, бэкап хоть какой-то базы
            1) Забэкапировать СОДЕРЖИМОЕ всех таблиц (как - гугл в помощь)
            2) Дропнуть поврежденную базу
            3) Создать чистую новую базу с теми же настройками (кодировка, пароли etc.)
            4) Залить содержимое старых таблиц в новую базу

            Никогда так не пробовал делать, но вам то уже терять нечего
            Бэкап сделал. Паника это хорошо, но не всегда.

            У меня есть СТАРАЯ таблица, но в ней нет содержимого столбика "name", может можно как то скопировать из одной таблицы в другую этот столбик?

            Я так понимаю сейчас там защита, и он это не дает сделать.

            Comment

            • Aksel
              Senior Member
              • Aug 2014
              • 101

              #7
              Вернул сейчас старую таблицу. Все работает, но нет имен у хостов. Можно конечно вручную вбить 2700 штук, и все будет работать.

              Но ведь есть какое то другое решение?

              Comment

              • Aksel
                Senior Member
                • Aug 2014
                • 101

                #8
                При попытке импортировать эту таблицу, пишет следующее:

                Code:
                Ошибка
                SQL-запрос:
                
                REPLACE INTO  `hosts` 
                VALUES (
                
                '10001', NULL ,  'Template OS Linux',  '3',  '0',  '',  '0',  '0',  '0',  '0',  '2',  '',  '',  '0',  '0',  '0',  '0', NULL ,  '0',  '0',  '0',  '0',  '0',  '',  '',  '0',  '0',  '0',  '',  'Template OS Linux',  '0', NULL
                )
                Ответ MySQL: Документация
                
                #1451 - Cannot delete or update a parent row: a foreign key constraint fails (`zabbix`.`graphs`, CONSTRAINT `c_graphs_3` FOREIGN KEY (`ymax_itemid`) REFERENCES `items` (`itemid`))

                Comment

                • Aksel
                  Senior Member
                  • Aug 2014
                  • 101

                  #9
                  Скопировать с другой таблицы, запросами не получилось. Поступил по другому.

                  Подменил таблицы, в заббиксе сделал экспорт узлов сети. Дальше выбрал импорт, и выбрал обновить только названия узлов сети.

                  Все работает!

                  з.ы. а ведь говорил, что паниковать последнее дело

                  Comment

                  • Aksel
                    Senior Member
                    • Aug 2014
                    • 101

                    #10
                    Мда, теперь вышла другая проблема. Хосты добавляются, изменяются. Но не удаляются. Тупо при нажимании на удалить, ничего не происходит...

                    Куда копать....

                    Comment

                    • Zentarim
                      Senior Member
                      • Mar 2012
                      • 526

                      #11
                      Ковырять логи zabbix сервера и mysql сервера на предмет ошибок?

                      Comment

                      • Aksel
                        Senior Member
                        • Aug 2014
                        • 101

                        #12
                        Originally posted by zentarim
                        Ковырять логи zabbix сервера и mysql сервера на предмет ошибок?
                        Решено, путем оптимизации таблицы.

                        Comment

                        • Zentarim
                          Senior Member
                          • Mar 2012
                          • 526

                          #13
                          Вы, однако, герой

                          Comment

                          • edisonkeith
                            Junior Member
                            • Mar 2021
                            • 1

                            #14
                            У меня проблемы с отслеживанием базы данных Zabbix (mariadb) с экрана консоли. Кстати, я новичок, наверное поэтому

                            Следовательно, могу ли я установить phpmyadmin на виртуальную машину, на которой расположен Zabbix Server, и изучить структуру базы данных, данных и т. Д.?

                            Comment

                            Working...