Исправление ошибки 1062 при импорте базы данных

На днях я переносил один из своих сайтов на новый хостинг и столкнулся с проблемой. Подробно о том, как перенести сайт на другой хостинг я расскажу в одной из следующих статей, а пока расскажу о самой проблеме и ее решении.

Файлы сайта я скопировал быстро, сделал экспорт базы данных со старого хостинга, но при попытке импортировать таблицы в базу на новом хостинге возникла ошибка в My SQL вот такого вида:

Ошибка

SQL-запрос:

— — Дамп данных таблицы `rich_blc_instances` — INSERT INTO `rich_blc_instances` (`instance_id`, `link_id`, `container_id`, `container_type`, `link_text`, `parser_type`, `container_field`, `link_context`, `raw_url`) VALUES (1, 1, 1, ‘blogroll’, ‘Документация’, ‘url_field’, ‘link_url’, ”, ‘http://codex.wordpress.org/Заглавная_страница’), (2, 2, 2, ‘blogroll’, ‘Блог WordPress’, ‘url_field’, ‘link_url’, ”, ‘http://wordpress.org/news/’), (3, 3, 3, ‘blogroll’, ‘Форумы поддержки’, ‘url_field’, ‘link_url’, ”, ‘http://ru.forums.wordpress.org/’), (4, 4, 4, ‘blogroll’, ‘Плагины’, ‘url_field’, ‘link_url’, ”, ‘http://wordpress.org/extend/plugins/’), (5, 5, 5, ‘blogroll’, ‘Темы’, ‘url_field’, ‘link_url’, ”, ‘http://wordpress.org/extend/themes/’), (6, 6, 6, ‘blogroll’, ‘Обратная связь’, ‘url_field’, ‘link_url’, ”, ‘http://ru.forums.wordpress.org/forum/20’), (7, 7, 7, ‘blogroll’, ‘Планета WordPr[…]

Ответ MySQL:

#1062 – Duplicate entry ‘1’ for key ‘PRIMARY’

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

В общих чертах я проблему понял, но вот как ее решить было неясно. На всех форумах, где встречалось описание подобной ошибки, люди писали, что она возникает при попытке добавить записи из одной базы данных в уже существующую другую.

Но я импортировал базу данных в пустые таблицы, более того, таблицы создавались в процессе импорта.

Решил проблему с ошибкой «#1062 – Duplicate entry ‘1’ for key ‘PRIMARY’» следующим образом:

Заменил в таблицах базы данных команду INSERT INTO на REPLACE INTO. В тексте ошибки, который я привел выше вы можете посмотреть в каком месте таблицы располагаются эти слова (выделил жирным).

По умолчанию, с помощью директивы insert база пыталась вставить значения в таблицу, но почему-то, находила дублированный key ‘PRIMARY’ и не могла вставить данные (как она их находила, я так и не разобрался). Директива replace заставила базу заменять данные при совпадении значений, не обращая внимания на прошлые записи.

Заменить эту директиву можно открыв сам файл базы данных с помощью текстового редактора – эта команда стоит перед блоком каждой таблицы. Открываете базу данных в текстовом редакторе, например, Akelpad и меняете все команды INSERT INTO на REPLACE INTO.

В моем же случае, получилось сделать проще – я по новой сделал экспорт таблицы на старом хостинге и в настройках экспорта установил этот самый REPLACE вместо INSERT.


37 комментариев на «“Исправление ошибки 1062 при импорте базы данных”»

  1. Опечатка: INCERT вместо INSERT.

    Ответить
  2. Спасибо, помогло )

    Ответить
  3. Здраствуйте! У меня я не пойму где я могу поменять дерективы или хотябы увидеть где они настроены?

    Ответить
    • Здравствуйте. Откройте базу данных в текстовом редакторе и там найдете все директивы.

      Ответить
  4. Спасибо вам очень помогли!!!

    Ответить
  5. Thx man, helps out a lot. I mean a LOT 🙂

    Ответить
  6. Спасибище! С Вашей помощью удалось обмануть это чудовище!!!

    Ответить
  7. мучалась неделю – спасибо Вам огромное – наконец-то работает!

    Ответить
  8. Спасибо большое. Всё получилось.

    Исправьте ошибку в статье: вместо INCERT, нужно INSERT

    Ответить
  9. спас, думую, то что нужно, иду пробовать. Извини, врядли я тебя ещё найду.
    Класс и спас тебе.Ок?

    Ответить
  10. за статью спасибо. Вот хотел подписаться по почте, но при активации поля перебрасывает на канал Ютуб. Это ваша оплошность или же такой оригинальный метод привлечения людей на видео хостинг?

    Ответить
    • На днях менял этот блок и недосмотрел закрывающую скобку. Спасибо, что обратили внимание и подсказали. Сейчас форма подписки работает.

      Ответить
  11. Благодарю , друг! Ты выручил меня!

    Ответить
  12. Огромное спасибо!!!! А то уже и не знала, что делать!!!!

    Ответить
  13. Сделал по новой экспорт, изменив insert на replace, теперь при импорте велезла другая ошибка:
    ________________________________________________________________
    Ошибка
    SQL-запрос:


    — Indexes for dumped tables


    — Indexes for table `wp_commentmeta`

    ALTER TABLE `wp_commentmeta` ADD PRIMARY KEY ( `meta_id` ) ,
    ADD KEY `comment_id` ( `comment_id` ) ,
    ADD KEY `meta_key` ( `meta_key` ( 191 ) ) ;

    Ответ MySQL: Документация

    #1068 – Multiple primary key defined
    ______________________________________________________________
    И что теперь с этим делать, может подскажете?

    Ответить
    • Я, к сожалению, не смогу помочь, так как мои познания в этих базах находятся на уровне “научного тыка” – нужен подопытный сайт, Яндекс и масса времени.
      Ошибку, описанную в статье я так и лечил.

      Ответить
  14. Сделал по новой экспорт, изменив insert на replace, теперь при импорте велезла другая ошибка
    Старую базу удалили на хосте? Удаляете старую, ставите новую. Прошло как по маслу. Месяц делала сайт и вылезла такая гадость. Спасли. Спасибо.)

    Ответить
  15. Спасибо, помогло!

    Ответить
  16. Спасибо, добрый человек! Помогло!

    Ответить
  17. Спасибо Вам большое! Очень помогло!..

    Ответить
  18. Спасибо за информацию!

    Ответить
  19. очень помог спасибо тебе.

    Ответить
  20. Спасибо большое, решение помогло 🙂

    Ответить
  21. Спасибо. Проблема решена.

    Ответить
  22. Мне удалось решить эту проблему по другому. Я зашла в phpmyadmin и в таблице присвоила для id в “Дополнительно” значение “AUTO_INCREMENT” (поставила галочку в колонке A_I). После этого ошибка пропала. Причина была в том, что первая запись в таблице имела id = 1, а когда импортировала БД, то AUTO_INCREMENT не передался. Когда стала добавлять новую запись, то ей присвоился сначала id = 0; когда следующую, то id = 1, который уже существовал и возник конфликт. Возможно мой метод кому-то пригодится.
    Метод замены с INTO на REPLACE возможно и устраняет ошибку, но может привести к полной замены старых данных на новые (особенно когда их много и все скрыто в чужом коде).

    Ответить
    • а можно подробнее как и куда зашли и где этот id находится

      Ответить
  23. Спасибо! Открыл базу в notepad++ заменил все надписи(у меня их получилось 1188) и всё загрузилось без ошибки 🙂

    Ответить
  24. То что было нужно )) Большое спасибо!

    Ответить
  25. Спасибо! Помогли!

    Ответить
  26. Help me, please!
    Перенес сайт на другой хостинг и сменил домен (причуда заказчика), предварительно скачал старую базу.
    Залил все на новый хостинг но при попытке импортировать старую базу получаю вот это:
    Ошибка
    SQL запрос:


    — Индексы сохранённых таблиц


    — Индексы таблицы `wp_commentmeta`

    ALTER TABLE `wp_commentmeta`
    ADD PRIMARY KEY (`meta_id`),
    ADD KEY `comment_id` (`comment_id`),
    ADD KEY `meta_key` (`meta_key`(191));
    Ответ MySQL: Документация
    #1068 – Multiple primary key defined
    Я в MySQL полный ламер, помогите пожалуйста, очень не хочется все по новой делать.
    Пиво гарантирую.

    Ответить
    • По этому запросу через поиск смотрите по форумам: “1068 — Multiple primary key defined”, я не сталкивался, не помогу.

      Ответить
  27. Добрый день. суть вашей ошибки в логике MySQL при вставке новой записи в поле с первичным ключом (нет структуры таблицы) которое я думаю имеет тип INT по умолчанию записывается 0 и потому MySQL не допускает вторичного значения по ключевому полю.

    Ответить
  28. Спасибо большое! Вопрос был решен!

    Ответить
  29. Автор красава! У меня чуть в другом была проблема но Ответ MySQL: как у тебя, благодарю!

    Ответить
  30. Спасибо за информацию!!!!!

    Ответить
  31. Только вы меня спасли!
    Со вчерашнего дня не могла ни чего сделать после обновления php!
    Я смогла восстановить свой сайт сама! Для этого долго искала ответ в интернете. Нашла у вас!
    Зашла в SQL, выбрала phpMyAdmin
    Сделала импорт с компьютера сохраненной мной БД перед обновлением.
    Сначала выдавал ошибку 1062 по ключу Primary писал что-то про Insert.

    Открыла свою сохраненную БД в Notepad++ и пыталась вручную заменить везде INSERT INTO на REPLACE INTO (правда, у меня база большая, поэтому я скопировала в Word и с помощью автозамены это сделала и перенесла весь текст назад в Notepad++)

    Заново сделала импорт БД и все пошло. Ура!

    Еще раз спасибо вам большое!

    Ответить
    • Рад, что помог.
      PS: В notepad тоже есть функция автозамены, вордом лучше с кодами не работать.

      Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *