Впервые столкнулся во время разработки с такой ситуаций: дубликаты первичных ключей в таблице MySQL.
При импорте таблицы с боевого сервера на локальный обнаружилось, что есть дубликаты первичных ключей. В первую очередь попробовал на боевом запросить записи с этим ключом:
SELECT *
FROM `map_group_tmp`
WHERE id =672192
В результате phpMyAdmin вернул только одну строку.
Ок, пошли дальше: поискал вхождения строки '672192' в .sql файле (результат экспорта из phpMyAdmin) с боевого. Действительно, нашлось две такие записи.
Попробовал такой запрос:
SELECT COUNT( * )
FROM `map_group_tmp`
WHERE 1
GROUP BY id
ORDER BY COUNT( * ) DESC
Всюду единички. Удивительно, как то ли phpMyAdmin, то ли движок БД прячет ситуацию, которой быть не должно вообще ни при каких обстоятельствах:)
Тогда пошел на хитрость:
SELECT t1.id, t1.time, t2.id, t2.time
FROM `map_group_tmp` t1, `map_group_tmp` t2
WHERE t1.id = t2.id
AND t1.items_ids != t2.items_ids
Ага, попались!:) Результат на скриншоте (time — время создания):
Несмотря на то, что на сервере реализована репликация БД, видно, что запись произошла с одного и того же сервера (последняя цифра id одинаковая у всех записей).
Также обратите внимание на время создания записей и последовательность id (они идут подряд).
Логи сервера показали, что примерно в это время произошла перезагрузка.
Автор: karenishe