Удалить сбойную таблицу Innodb

Я не могу удалить/удалить поврежденную таблицу Innodb. Я получаю следующую ошибку:

ОШИБКА 1051 (42S02): Неизвестная таблица «счета»

И если я хочу создать его, я получаю следующую ошибку:

ОШИБКА 1005 (HY000): не удается создать таблицу «счета» (номер ошибки: -1)

Это происходит на моем сервере после случайного сбоя питания.

С Уважением


person Sacx    schedule 10.07.2010    source источник


Ответы (4)


Я также нашел эту проблему здесь http://www.randombugs.com/linux/crash-innodb-table.html, и кажется, что простое удаление файла ibdata и перезапуск mysql может решить эту проблему. В любом случае, это не совсем решение, если у вас нет резервной копии.

person Sacx    schedule 25.02.2011
comment
Если вы используете innodb_file_per_table, то данные вашей таблицы не будут храниться в файлах ibdata1 и log по умолчанию, поэтому их удаление не будет проблемой. Конечно, это не идеальное решение, но для моих целей ibdata1 — это черный ящик, и его легче удалить, чем пытаться восстановить. - person 111; 18.11.2013

Помогает ли отключение ограничений внешнего ключа перед удалением таблицы?

set foreign_key_checks=0;
drop table <table>;
set foreign_key_checks=1;

Есть отчет об ошибке, в котором подробно описывается что-то подобное, но я не уверен, что это та же проблема:

http://bugs.mysql.com/bug.php?id=5784

Если нет, вы можете попробовать mysqlcheck:

mysqlcheck -u root -p <dbname> --auto-repair --check --optimize --databases

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

person Mike    schedule 10.07.2010

Я предполагаю, что InnoDB даже не загружен (проверьте SHOW ENGINES), поэтому вы не сможете УДАЛИТЬ его, пока сначала не устраните эту проблему.

Обычно вы можете запустить InnoDB в режиме восстановления 3, удалить все, что вам нужно, а затем завершить работу и удалить настройку режима восстановления:

http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html

person Morgan Tocker    schedule 24.07.2010

Простое решение, которое сработало для меня.

  1. Попробуйте удалить таблицу.

    отбросить таблицу tableOne;

Вы увидите ошибку:

ERROR 1051 (42S02): Unknown table 'tableOne'
  1. Скопируйте инструкцию создания этой таблицы из другой базы данных или напишите ее.

    CREATE TABLE tableOne ( ID int(11) NOT NULL, LOCKED tinyint(1) NOT NULL) ENGINE=InnoDB;

Успешный

Query OK, 0 rows affected (0.03 sec)
  1. Бросьте стол

    drop table tableOne;  
    

Успешный

    Query OK, 0 rows affected (0.01 sec) 
person biniam    schedule 18.02.2016