На днях я переносил один из своих сайтов на новый хостинг и столкнулся с проблемой. Подробно о том, как перенести сайт на другой хостинг я расскажу в одной из следующих статей, а пока расскажу о самой проблеме и ее решении.
Файлы сайта я скопировал быстро, сделал экспорт базы данных со старого хостинга, но при попытке импортировать таблицы в базу на новом хостинге возникла ошибка в 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.
Опечатка: INCERT вместо INSERT.
Спасибо, помогло )
Здраствуйте! У меня я не пойму где я могу поменять дерективы или хотябы увидеть где они настроены?
Здравствуйте. Откройте базу данных в текстовом редакторе и там найдете все директивы.
Спасибо вам очень помогли!!!
Thx man, helps out a lot. I mean a LOT 🙂
Спасибище! С Вашей помощью удалось обмануть это чудовище!!!
мучалась неделю — спасибо Вам огромное — наконец-то работает!
Спасибо большое. Всё получилось.
Исправьте ошибку в статье: вместо INCERT, нужно INSERT
спас, думую, то что нужно, иду пробовать. Извини, врядли я тебя ещё найду.
Класс и спас тебе.Ок?
за статью спасибо. Вот хотел подписаться по почте, но при активации поля перебрасывает на канал Ютуб. Это ваша оплошность или же такой оригинальный метод привлечения людей на видео хостинг?
На днях менял этот блок и недосмотрел закрывающую скобку. Спасибо, что обратили внимание и подсказали. Сейчас форма подписки работает.
Благодарю , друг! Ты выручил меня!
Огромное спасибо!!!! А то уже и не знала, что делать!!!!
Сделал по новой экспорт, изменив 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
______________________________________________________________
И что теперь с этим делать, может подскажете?
Я, к сожалению, не смогу помочь, так как мои познания в этих базах находятся на уровне «научного тыка» — нужен подопытный сайт, Яндекс и масса времени.
Ошибку, описанную в статье я так и лечил.
Сделал по новой экспорт, изменив insert на replace, теперь при импорте велезла другая ошибка
Старую базу удалили на хосте? Удаляете старую, ставите новую. Прошло как по маслу. Месяц делала сайт и вылезла такая гадость. Спасли. Спасибо.)
Спасибо, помогло!
Спасибо, добрый человек! Помогло!
Спасибо Вам большое! Очень помогло!..
Спасибо за информацию!
очень помог спасибо тебе.
Спасибо большое, решение помогло 🙂
Спасибо. Проблема решена.
Мне удалось решить эту проблему по другому. Я зашла в phpmyadmin и в таблице присвоила для id в «Дополнительно» значение «AUTO_INCREMENT» (поставила галочку в колонке A_I). После этого ошибка пропала. Причина была в том, что первая запись в таблице имела id = 1, а когда импортировала БД, то AUTO_INCREMENT не передался. Когда стала добавлять новую запись, то ей присвоился сначала id = 0; когда следующую, то id = 1, который уже существовал и возник конфликт. Возможно мой метод кому-то пригодится.
Метод замены с INTO на REPLACE возможно и устраняет ошибку, но может привести к полной замены старых данных на новые (особенно когда их много и все скрыто в чужом коде).
а можно подробнее как и куда зашли и где этот id находится
Спасибо! Открыл базу в notepad++ заменил все надписи(у меня их получилось 1188) и всё загрузилось без ошибки 🙂
То что было нужно )) Большое спасибо!
Спасибо! Помогли!
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», я не сталкивался, не помогу.
Добрый день. суть вашей ошибки в логике MySQL при вставке новой записи в поле с первичным ключом (нет структуры таблицы) которое я думаю имеет тип INT по умолчанию записывается 0 и потому MySQL не допускает вторичного значения по ключевому полю.
Спасибо большое! Вопрос был решен!
Автор красава! У меня чуть в другом была проблема но Ответ MySQL: как у тебя, благодарю!
Спасибо за информацию!!!!!
Только вы меня спасли!
Со вчерашнего дня не могла ни чего сделать после обновления php!
Я смогла восстановить свой сайт сама! Для этого долго искала ответ в интернете. Нашла у вас!
Зашла в SQL, выбрала phpMyAdmin
Сделала импорт с компьютера сохраненной мной БД перед обновлением.
Сначала выдавал ошибку 1062 по ключу Primary писал что-то про Insert.
Открыла свою сохраненную БД в Notepad++ и пыталась вручную заменить везде INSERT INTO на REPLACE INTO (правда, у меня база большая, поэтому я скопировала в Word и с помощью автозамены это сделала и перенесла весь текст назад в Notepad++)
Заново сделала импорт БД и все пошло. Ура!
Еще раз спасибо вам большое!
Рад, что помог.
PS: В notepad тоже есть функция автозамены, вордом лучше с кодами не работать.
Это временное решение, как только сервак перезапустится, все в топку.
Те же яйца, только в профиль, все реплэйс на инсерт вернутся. Ты хоть тэстируй, прежде чем чью то ахинею, не знаю у кого ты там это накопал, народу предлагать.
1. Действие по импорту базы одноразовое — перенесли базу и всё, таблицы записаны, причем тут перезагрузка сервера?
2. Замена команд проводится в файле, который у вас скачан на компьютер, в действующих таблицах на сервере этих команд вообще нет, причем здесь перезагрузка сервера?
3. Если человек идиот, это надолго.
Встретился с ошибкой MySQL #1062 «Duplicate entry »2147483647″ for key ‘PRIMARY’ при импорте данных в таблицу базы данных MySQL из файла .csv Причина оказалась в том, что для поля с ключом PRIMARY был установлен тип данных INT(11) без указания атрибута UNSIGED. Поэтому
2147483647 — это максимальное знчение, которое может быть для данного поля. В импортируемых данных были записи в которых это значение было больше 2147483647. Установка типа данных для поля с ключом ‘PRIMARY’ INT(11) c атрибутом UNSIGNED устранила ошибку #1062, так как в этом случае максимальное значение для данного поля будет 4294967295. Если ваши данные содержат значения еще больше, установите тип данных BIGINT.
Ты, парень, просто красавчик! Надо же догадался новичок сделать то, что высоколобые пердуны (типа спецы) не смогли. Зачот тебе однозначна, а заумным пердунам карма в минус.