Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет
описание структуры:
база имеет ~40 таблиц InnoDb и MyIsam
встала задача логировать все изменения которые делают юзеры
и вот что я напридумывал. на каждой таблице висит по 3 тригера
CREATE TRIGGER `trgafterinsert_имя_таблицы` AFTER INSERT ON `имя_таблицы`
FOR EACH ROW
BEGIN
... /*формирую информацию для понимания что было добавленно и кем*/
INSERT INTO `test` (`ID`) VALUES (NULL); /*изначально был запрос со вставкой новых данных в таблицу логов, но ошибки точно такиеже*/
END;
CREATE TRIGGER `trgafterupdate_имя_таблицы` AFTER UPDATE ON `имя_таблицы`
FOR EACH ROW
BEGIN
... /*формирую информацию для понимания что было изменено и кем*/
INSERT INTO `test` (`ID`) VALUES (NULL); /*изначально был запрос со вставкой измененных данных в таблицу логов, но ошибки точно такиеже*/
END;
CREATE TRIGGER `trgafterdelete_имя_таблицы` AFTER DELETE ON `имя_таблицы`
FOR EACH ROW
BEGIN
... /*формирую информацию для понимания что было удалено и кем*/
INSERT INTO `test` (`ID`) VALUES (NULL); /*изначально был запрос со вставкой удаленных данных в таблицу логов, но ошибки точно такиеже*/
END;
инсерты сыплются в
CREATE TABLE `test` (
`ID` int(10) unsigned NOT NULL auto_increment,
`DATA` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-----------------------------------------------
описание проблемы:
когда начинается нагрузка на базу (даже не значительная) 500 000 вставок/5 минут в таблицу `test` регестрирующие действия, получаю ошибки
Duplicate entry '136549' for key 1 (для запроса UPDATE `ххххх` SET .....)
Duplicate entry '1008843012731742461-27-14-2012-03-05' for key 1 (для запроса INSERT INTO `ууууу` ....)
Duplicate entry '247037' for key 1 (для запроса INSERT INTO `ттттт` ....)
Duplicate entry '428168' for key 1 (для запроса DELETE FROM `ттттт` ....)
и так далее порядка 20 за 5 минут работы
причем '136549', '247037', '428168 соответствуют номерам PRK из таблицы `test`
a '1008843012731742461-27-14-2012-03-05' вообще нет такого ключа (1008843012731742461 - вот это первичный ключ из таблицы `ууууу`)
помогите понять что я делаю не так!
или может я от mysql требую того что она не может дать?
Неактивен
Это не обязательно первичный ключ. Длинный — это вторичный ключ из другой
таблицы (но уникальный, да).
А просто анализировать двоичный журнал не пробовали? Это сильно проще,
и это уже написано и работает.
Неактивен
1008843012731742461 он первичный значит и уникальный
про двоичный журнал, но есть еще некоторые ньюансы которые требуют от меня именно такого решения
если возможность довести до ума этот вариант??
Неактивен
Напишите один триггер, убедитесь, что работает, напишите второй. Скорее всего,
где-то ошиблись. Автоинкремент никогда не выдает повторных значений, поэтому
это или ошибка в СУБД, или где-то всё-таки ошиблись в тексте триггера.
Неактивен
переделал все тригеры, так что они для каждой таблицы имеют вид
CREATE TRIGGER `trgafterinsert_ччч` AFTER INSERT ON `ччч`
FOR EACH ROW
BEGIN
INSERT INTO `test` (`ID`) VALUES (NULL);
END;
CREATE TRIGGER `trgafterupdate_ччч` AFTER UPDATE ON `ччч`
FOR EACH ROW
BEGIN
INSERT INTO `test` (`ID`) VALUES (NULL);
END;
CREATE TRIGGER `trgafterdelete_ччч` AFTER DELETE ON `ччч`
FOR EACH ROW
BEGIN
INSERT INTO `test` (`ID`) VALUES (NULL);
END;
и так для каждой таблицы.
упростить больше нельзя! ))
но проблемы сохроняются.
может ли это быть связанно с багами определенной версии mysql?
Версия сервера: 5.0.75-0ubuntu10-log
Версия протокола: 10
p.s. SHOW triggers;
Trigger | Event | Table | Statement | Timing | Created | sql_mode | Definer
trgafterinsert_ччч | INSERT | ччч | ... | AFTER NULL | NULL | | root@localhost
Неактивен
ответ тут, пишу на всякий случай может у кого-то будут такие же проблемки
http://bugs.mysql.com/bug.php?id=26316
Неактивен
Угу. И ветку 5.0 не обновили
Спасибо за ссылку.
Неактивен