2 июля 2009 г. MySQL InnoDB

Восстановление структуры таблиц InnoDB

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

Комментарии

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

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

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

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.
как бы это вылечить

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

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

не помогло =(
и

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

тоже

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

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

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

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

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

Markdown