Сломалась табличка у меня в innodb БД (одна из session_detail_ модуля диалап), и при обращении к ней база падала.
Способы CHECK TABLE, REPAIR TABLE, mysqlcheck, и т.д не помогли, падала БД.
REPAIR TABLE вообще не лечит innodb таблицы.
Решил следующим образом: .
Код:
CREATE TABLE <table_new> LIKE <crashed_table>;
INSERT INTO <table_new> SELECT * FROM <crashed_table>;
Если данные заполнились успешно, то сразу переименовываем, и все ок.
Код:
ALTER TABLE <crashed_table> RENAME TO <crashed_table_old>;
ALTER TABLE <table_new> RENAME TO <crashed_table>;
Если же при
Код:
INSERT INTO <table_new> SELECT * FROM <crashed_table>;
падает БД, как и было у меня, то поосновательнее подходим к решению: запускаем mysql с параметром(в my.ini)
Код:
[mysqld]
innodb_force_recovery = 4
при этом БД перестаёт падать при обращение к этой таблице, но и перестает работать конструкция INSERT INTO table SELECT * FROM table2. Потому снимаем копию раненной таблицы(mysqldump, или сторонней программой, например mysqladministrator), и перезаливаем её, предварительно переименовав раненную таблицу, для страховки.
--
Спасибо за оперативную помощь Шамилю, ООО "Бител".