MYIインデックスファイルが欠落しているか、そのヘッダが破損している場合は、myisamchkのコマンドを使用できない場合は、MySQLデータベースの破損を扱う:あなたがしてMySQLのコマンドプロンプトから修復を行う必要があるMYIファイルが壊れているか不足している場合、MySQLコマンドプロンプトからすべてのデータベースのすべてのテーブルを修復できますか?
myisamchk --safe-recover --force --sort_buffer_size=2G --key_buffer_size=2G /var/lib/mysql/*/*.MYI
をUSE_FRMオプション:MySQL documentation's on repairing tables
パー
repair tbl_name use_frm;
.MYIインデックスファイルがmissinある場合USE_FRMオプションが使用可能ですgまたはヘッダが破損している場合このオプションは.MYIファイルヘッダ内の情報を信頼しないようにMySQLに指示し、.frmファイルからの情報を使ってファイルを再作成します。 この修理はmyisamchkで行うことはできません。 myisamchkので
、あなたは簡単に各データベースのフォルダにドロップすると、コマンドの末尾にアスタリスクを使用して、すべてのテーブルを修復することができます
は/var/lib/mysql/*/*.MYI
あなたはMySQLのコマンドプロンプトから似た何かを行うことはできません。
how to repair all tables within one specific database from the MySQL command prompt with a procedureを説明して解答してStackOverflowの質問があります:
CREATE DEFINER = 'root'@'localhost'
PROCEDURE MYDATABASE.repair_all()
BEGIN
DECLARE endloop INT DEFAULT 0;
DECLARE tableName char(100);
DECLARE rCursor CURSOR FOR SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA`=DATABASE();
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET endloop=1;
OPEN rCursor;
FETCH rCursor INTO tableName;
WHILE endloop = 0 DO
SET @sql = CONCAT("REPAIR TABLE `", tableName, "`");
PREPARE statement FROM @sql;
EXECUTE statement;
FETCH rCursor INTO tableName;
END WHILE;
CLOSE rCursor;
END
は、それはすべてあなたのMySQLデータベースをループするために、次のように手順を変更し、これらのデータベース内のすべてのテーブルを修復することは可能ですか?
これは、多数のデータベースを持ち、深刻な腐敗に遭遇した人にとっては便利だと思います。
あなたのsnarkyコメントは本当に必要でしたか?近い将来、InnoDBに切り替えることができない状況に陥っています。 – Drew