#mysql #innodb
#mysql #innodb
Вопрос:
Мы используем Mysql 5.1 на наших производственных серверах и пытаемся выполнить запрос alter, чтобы изменить тип данных столбца с tinytext на varchar(200). При выполнении запроса alter мы видим эту ошибку :-
#1025 — Ошибка при переименовании ‘./ msging/#sql-123b_ab7634’ в ‘./ msging / исходящие’ (ошибка: -1)
Форумы MySQL предполагают, что эта ошибка может быть вызвана ограничениями внешнего ключа. Но в нашей схеме нет внешних ключей. Журналы ошибок mysql показывают указанную ниже ошибку.Мы прошли по ссылке, указанной в заявлении об ошибке, но не смогли найти ничего полезного. Есть идеи, что может пойти не так?
InnoDB: Ошибка: ‘./msging/ outboxes.ibd’ уже находится в кэше памяти табличного
пространства 111001 12:40:18 InnoDB: ошибка при переименовании таблицы, не удается переименоватьmsging
.#sql-123b_ab4828
tomsging
.outboxes
111001 12:40:18 InnoDB: Ошибка: таблицаmsging
.outboxes
не существует во внутреннем словаре InnoDB
InnoDB: data, хотя MySQL пытается его удалить.
InnoDB: Вы скопировали файл .frm таблицы
в каталог базы данных InnoDB: MySQL из другой базы данных?
InnoDB: вы можете обратиться за дополнительной помощью к
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html
Ответ №1:
При переименовании таблицы с помощью ALTER TABLE
, вот что происходит:
- Таблица копируется в новый файл со случайным именем файла.
- В новый файл внесены изменения.
- Старая таблица переименована с использованием случайного временного имени файла.
- Новая таблица переименована, чтобы занять место старого файла.
- Старая таблица удалена.
Смотрите эту ссылку для получения более подробной информации: http://www.xaprb.com/blog/2006/08/22/mysqls-error-1025-explained /
Вы можете использовать innotop
для получения более подробной информации об ошибке: http://code.google.com/p/innotop /