Сообщение об ошибке не имеет представления о том, как это произошло. Это может быть неисправный диск, незавершенная запись ввода-вывода, ошибка в коде MySQL, или кто-то мог открыть файл и нацарапать его с помощью редактора.
Что можно сделать, чтобы исправить это, следует использовать инструмент для ремонта таблицы myisamchk
, который входит в состав MySQL. Как использовать этот инструмент здесь: https://dev.mysql.com/doc/refman/5.7/en/myisam-repair.html
Что можно сделать, чтобы предотвратить его? Прекратите использование механизма хранения MyISAM.
MyISAM когда-то считался более стабильным и более высокопроизводительным, но это было более 10 лет назад. С тех пор InnoDB получил все технические усовершенствования, он значительно выше по производительности, чем MyISAM, и это намного безопаснее с точки зрения саморемонта. Постепенно в каждом выпуске MySQL MyISAM устаревает.
Изменение механизма хранения так просто, как:
ALTER TABLE wp_posts ENGINE=InnoDB;
Вы должны сделать это для каждой таблицы в базе данных, по одному за раз. Но вы можете создать набор команд для запуска:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS _sql
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE';
перехватывать вывод этого запроса и выполнить заявления как сценарий SQL. В 99% случаев нет никакой пользы для использования MyISAM, если вы используете текущую версию MySQL (например, любую версию GA в ветке 5.5 или более поздней).
Спасибо за подробное объяснение Билл! Когда я пытаюсь запустить средство mysiamchk, он говорит, что он не может создать новый tempfile. Затем я заметил, что 'wp_posts' говорит, что он используется (и это было похоже на весь день). Я нашел эту статью (https://portal.my-tss.com/knowledgebase/254/MySQL-Table-says-IN-USE-but-table-will-not-repair-in-phpmyadmin.html), которая описывает, как чтобы обойти это, но когда я пытаюсь использовать SSH в папке для моей БД, он говорит, что Permission denied. Моя техническая поддержка хостинг-провайдера не знает, почему у меня не будет разрешения на 'cd' в эту папку. Есть идеи? – zeckdude
Для каталога данных MySQL не редкость иметь ограниченные разрешения. По умолчанию каталог доступен для пользователя mysql, или root, конечно. –
Итак, если таблица 'wp_posts' застряла' в использовании', тогда нет способа восстановить эту таблицу? – zeckdude