Преобразование myisam в innodb дает таблицу, которая уже существует (почти) во всех таблицах.

Это должно было быть легко... У меня есть база данных с примерно 20 таблицами, все в MyISAM. Я хотел преобразовать их в InnoSB, поэтому выполнил:

alter table xxxx engine = InnoDB;

В результате я получаю

ERROR 1050 (42S01): Table './yyy/xxx' already exists

Я попробовал несколько таблиц и думал, что это произойдет со всеми, пока не наткнулся на две таблицы, которые были преобразованы правильно. СОСТОЯНИЕ SHOW TABLE подтвердило правильное преобразование. Как ни странно, несколько других таблиц имели очень похожую или равную структуру, но не конвертировались.

Версия MySQL 5.5.27... Я пробовал через phpMyAdmin и напрямую через команды mysql. Тот же результат.

Примечание. Я нашел тему, указанную ниже, и вот некоторые из тестов: - Я сделал mysqlchk для таблицы - все в порядке. - Предложенный вариант DROP TABLE работает, таблица исчезает, - REPAIR TABLE затем сообщает, что не может файлировать таблицу (что логично). - Если я восстановлю таблицу из резервной копии, снова появится та же ошибка.

Может ли существовать параллельная таблица InnoDB, которую я не вижу?


person jcoppens    schedule 06.07.2013    source источник
comment
Возможно, посмотрите некоторые ответы здесь: stackoverflow.com/questions/3302476/   -  person takteek    schedule 06.07.2013
comment
Да, конечно, я читал эту тему. Я сделал несколько из предложенных решений, а также проверил многие ссылки на «внешний ключ», которые я нашел в других письмах. Не все решения здесь действительно «проверяемые», поскольку я пытаюсь преобразовать, поэтому я не могу удалить исходную базу данных. Я добавил пару к исходному сообщению.   -  person jcoppens    schedule 06.07.2013
comment
Я полагаю, вы могли бы создать новые таблицы в другой схеме и скопировать данные с помощью INSERT.. SELECT. У меня действительно нет хороших идей о том, что вызывает вашу ошибку. Проблема с разрешениями на файлы таблицы...?   -  person takteek    schedule 06.07.2013


Ответы (1)


Справедливости ради, решение навеяно одной из последних записей в теме, указанной #takteek.

Решив, что проблема, вероятно, в дублирующейся таблице (оригинал в MyISAM и, возможно, некоторые таблицы в InnoDB, оставшиеся от предыдущих экспериментов), я решил использовать подход кувалды:

  • УДАЛИТЬ БАЗУ ДАННЫХ гггг;
  • Восстановил базу данных MyISAM из резервной копии (остановил сервер, разархивировал архив базы данных, перезапустил сервер).
  • затем сделал ALTER TABLES xxx ENGINE InniDB на каждой таблице

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

Во всяком случае, может быть, это кому-то поможет.

person jcoppens    schedule 06.07.2013