mysql-logo

Бывает, что при перемещении базы sql-дамп не получается создать и остаются только файлы «*.frm», вы их заливаете в каталог «/var/db/mysql» и в надежде что заработают innodb-таблицы приходите в отчаянье, потому что они не работают...

Например при mysqldump, может выпасть ошибка:

Got error: 1146: Table `table_name` doesn't exist when using LOCK TABLES

Вам поможет этот хитрый трюк

Создаёте базу данных «my_test»:

mysql> CREATE DATABASE my_test;
mysql> USE my_test;

после чего, создаёте там соответствующую названию файлу «table_name.frm» пустую таблицу:

mysql> CREATE TABLE `table_name` (`id` INT PRIMARY KEY) ENGINE=Innodb;

после, замените созданный вами файл в тестовой таблице «my_test» исходным файлом таблицы:

cp /var/db/mysql/database_name/TABLE_NAME.frm /var/db/mysql/my_test/TABLE_NAME.frm

А теперь посмотрим структуру нашей таблицы:

mysql> USE my_test;
mysql> SHOW CREATE TABLE TABLE_NAME;

и вы увидите структуру, а дальше можете делать дамп или что вы там делали!

Также вы можете перенести все ваши побитые таблицы и переименовать базу в прежнее имя (удалив при этом старую естественно).

З.Ы. Почитайте полезную статью Восстановление данных InnoDB в MySQL


Комментарии (8) на запись «Восстановление структуры таблиц InnoDB»

» Трекбеки скрыты, показать их?
  1. Vasiliy G Tolstov | 26.10.2009 в 14:37

    перепечатка с mylsqperformanceblog.com на данный момент очень часто не работает, клиента на оригинальном сайте написал что ему выдается и сообщение так и осталось без ответа.

  2. adw0rd | 26.10.2009 в 14:56

    Vasiliy G Tolstov, какая перепечатка, этот пост основан на моем личном опыте, собранном с нескольких форумов, но ни как не с «mylsqperformanceblog»

  3. adw0rd | 26.10.2009 в 14:57

    на данный момент очень часто не работает, клиента на оригинальном сайте написал что ему выдается и сообщение так и осталось без ответа.

    тут я вообще не понял о чем вы, более подробно пожалуйста
  4. Денис | 06.02.2010 в 21:07

    100206 20:22:12100206 20:22:12

    [ERROR] Cannot find table GeoTerabit/Zione from the internal data dictionary
    of InnoDB though the .frm file for the table exists. Maybe you
    have deleted and recreated InnoDB data files but have forgotten
    to delete the corresponding .frm files of InnoDB tables, or you
    have moved .frm files to another database?
    See http://dev.mysql.com/doc/refman/5.0/en/innodb-troubleshooting.html
    how you can resolve the problem.

    как бы это вылечить

  5. adw0rd | 07.02.2010 в 03:06

    Дык то что там написано не помогает?

  6. Денис | 07.02.2010 в 14:16

    Дык то что там написано не помогает?

    не помогло =(

    и

    find /var/lib/mysql -name '*.ibd' -exec innochecksum -c -v {} \;

    тоже

    не могли бы вы написать как в упрощеном варианте использовать innodb-tools от google было бы круто :)

    code.google.com/p/innodb-tools/

  7. tty01 | 18.09.2010 в 19:07

    Блин, работает! Биг спс. Час втыкал то, что написано на mylsqperformanceblog, но ничего не получалось — процесс mysqld постепенно занимал 128 МБ памяти и помирал. А этот способ сработал сразу.

  8. Ivan | 01.03.2012 в 22:27

    Отличный метод, уже почти опустил руки и вот оно решение!))

Оставить комментарий