If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to REGISTER before you can post. To start viewing messages, select the forum that you want to visit from the selection below.
1) берёте исходники для Вашей версии Zabbix;
2) там в папке "database/<СУБД>/" будет файл "data.sql";
3) копируете его в другое место, в копии вырезаете всё, кроме секции, относящейся к нужной Вам таблице;
4) действуете в соответствии с инструкцией для Вашего типа базы данных, чтобы загнать данные в базу (фактически, нужна только одна команда - импорт данных из файла "data.sql", остальное у Вас уже есть, поэтому ни создавать саму базу, ни трогать файлы "schema.sql" и "images.sql" Вам не надо).
Смотрите какая ситуация. В файле data.sql нашел искомые мне данные со стоки 4834 по 5366, но они не вставляются. Пишет Ошибку "Ошибка SQL (1452): Cannot add or update a child row: a foreign key constraint fails (`zabbix`.`graphs_items`, CONSTRAINT `c_graphs_items_2` FOREIGN KEY (`itemid`) REFERENCES `items` (`itemid`) ON DELETE CASCADE)".
Пошел дальше. Скопировал таблицу на всякий случай в graphs_items_copy. Далее удалил таблицу graphs_items. Нашел в schema.sql где она создается строки с 676 по 689 и две строки 1770 и 1771. Так вот если сначала выполнить создание из schema.sql, то данные из data.sql также не вставляются смотри ошибку выше. Если выполнить создание из schema.sql без строк 1770 и 1771, то данные из data.sql вставляются, но после не хотят вставляться строки 1770 и 1771. Не как не могу понять с какой последовательности нужно сделать. Пойду пока читать доки по скл. Если кто знает решение, буду признателен.
на всякий случай строки из schema.sql
с 676 по 689
CREATE TABLE `graphs_items` (
`gitemid` bigint unsigned NOT NULL,
`graphid` bigint unsigned NOT NULL,
`itemid` bigint unsigned NOT NULL,
`drawtype` integer DEFAULT '0' NOT NULL,
`sortorder` integer DEFAULT '0' NOT NULL,
`color` varchar(6) DEFAULT '009600' NOT NULL,
`yaxisside` integer DEFAULT '0' NOT NULL,
`calc_fnc` integer DEFAULT '2' NOT NULL,
`type` integer DEFAULT '0' NOT NULL,
PRIMARY KEY (gitemid)
) ENGINE=InnoDB;
CREATE INDEX `graphs_items_1` ON `graphs_items` (`itemid`);
CREATE INDEX `graphs_items_2` ON `graphs_items` (`graphid`);
1770 и 1771
ALTER TABLE `graphs_items` ADD CONSTRAINT `c_graphs_items_1` FOREIGN KEY (`graphid`) REFERENCES `graphs` (`graphid`) ON DELETE CASCADE;
ALTER TABLE `graphs_items` ADD CONSTRAINT `c_graphs_items_2` FOREIGN KEY (`itemid`) REFERENCES `items` (`itemid`) ON DELETE CASCADE;
Сейчас методом тыка выяснил, что если выполнить из schema.sql с 676 по 689, потом из data.sql с 4834 по 5366 то все ок, потом опять из schema.sql 1770 и 1771 происходит ошибка.
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`zabbix`.`#sql-3221_3d78a`, CONSTRAINT `c_graphs_items_2` FOREIGN KEY (`itemid`) REFERENCES `items` (`itemid`) ON DELETE CASCADE)
Смотрите какая ситуация. В файле data.sql нашел искомые мне данные со стоки 4834 по 5366, но они не вставляются. Пишет Ошибку "Ошибка SQL (1452): Cannot add or update a child row: a foreign key constraint fails (`zabbix`.`graphs_items`, CONSTRAINT `c_graphs_items_2` FOREIGN KEY (`itemid`) REFERENCES `items` (`itemid`) ON DELETE CASCADE)".
Я, к сожалению, не самый большой спец по базам данных. Но, насколько я понимаю, в строчке 1771 задаётся constraint, оговаривающий, что в каждой записи этой таблицы поле "itemid" должно совпадать с какой-то строкой в таблице "items", в которой должна быть строка таким же содержимым в поле "itemid".
Видимо, у Вас удалились данные не только из таблицы "graphs_items", но также и соответствующие им из таблицы "items", которые дожны быть добавлены до того, как будут добавляться строки в "graphs_items". Наверное, их тоже можно "вырезать" из того же файла "data.sql", но для таблицы "items" есть свои constraint-ы и есть шанс, что можно нарваться уже на них. Возможно, проще было бы восстановить всю базу из бэкапа? Если это какая-то тестовая среда, то явно проще было бы эту базу целиком пересоздать.
Comment