2013-07-13 5 views
0

Цель этой таблицы - собрать несколько статистических данных (заданных по столбцу 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 на подчиненном устройстве, она работает нормально. Только тогда, когда он сходит с репликации, у него есть проблема.

+0

Является ли это значением времени или основным ключом, вызывающим ошибку повторяющегося ключа? Кроме того, вы на 100% уверены, что таблица на подчиненном сервере пуста, когда вы пытаетесь запустить запрос 'REPLACE'? – dethtron5000

+0

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

ответ

0

Войдите на подчиненный сервер и убедитесь, что значение автоинкремента на нем равно или превышает текущее максимальное значение на вашем хозяине. Вероятно, происходит то, что значение автоинкремента каким-то образом вышло из синхронизации между ведущим и ведомым. После того, как вы узнаете значение автоматического приращения ведомого, вы можете ALTER TABLE мастера и установить начальное значение автоматического приращения в безопасное число, которое больше, чем значение автоматического прироста на ведомом устройстве.

+0

Это было на новой дампе от мастера и нагрузка на раба. Как только раб догнал мастера, проблема началась. Автоинкремент верен. –

Смежные вопросы