Цель этой таблицы - собрать несколько статистических данных (заданных по столбцу name
) по-минутам, а затем я написал несколько sql, в котором свертывается сумма() минут в часы по имени, и сумма() часов в дни, и т.д.mysql 'replace into' не работает только на slave-сервере репликации
Вот структура таблицы:
CREATE TABLE IF NOT EXISTS `stats` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`time` varchar(19) NOT NULL,
`name` varchar(16) NOT NULL,
`value` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `time_name` (`time`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=32060002 ;
Вот одна из ошибок, приведенных в «шоу-статус подчиненного»:
Last_SQL_Error: Error 'Duplicate entry '32189722' for key 'PRIMARY'' on query. Default database: 'quip_mailer'. Query: 'replace into stats select NULL, date_format(execute_time, '%Y-%m-%d %H:%i'), 'sent', count(*) as v from queue as q where execute_time > '2013-07-13 16:17:00' group by date_format(execute_time, '%Y-%m-%d %H:%i') order by date_format(execute_time, '%Y-%m-%d %H:%i')'
Ошибка - это первичный ключ, хотя, как вы видите, первичный ключ передается в NULL.
И почему бы не «заменить» на самом деле удар и заменить данные в любом случае? Не имеет смысла для меня.
Если я скопирую/вставлю, запустите эту точную команду sql на подчиненном устройстве, она работает нормально. Только тогда, когда он сходит с репликации, у него есть проблема.
Является ли это значением времени или основным ключом, вызывающим ошибку повторяющегося ключа? Кроме того, вы на 100% уверены, что таблица на подчиненном сервере пуста, когда вы пытаетесь запустить запрос 'REPLACE'? – dethtron5000
первичный ключ. Я пошел вперед и дал мне одну из ошибок, а затем добавил к вопросу выше. Также добавлено примечание о том, что точная команда отлично работает на подчиненном устройстве, просто не работает, когда дело доходит до репликации. –